다음을 통해 공유


Unsafe.AsRef 메서드

정의

오버로드

AsRef<T>(Void*)

관리되지 않는 포인터를 형식 T의 값으로 관리되는 포인터로 변환합니다.

AsRef<T>(T)

지정된 읽기 전용 참조를 변경 가능한 참조로 다시 해석합니다.

AsRef<T>(Void*)

Source:
Unsafe.cs
Source:
Unsafe.cs
Source:
Unsafe.cs

중요

이 API는 CLS 규격이 아닙니다.

관리되지 않는 포인터를 형식 T의 값으로 관리되는 포인터로 변환합니다.

public:
generic <typename T>
 static T % AsRef(void* source);
public static ref T AsRef<T> (void* source);
[System.CLSCompliant(false)]
public static ref T AsRef<T> (void* source);
static member AsRef : nativeptr<unit> -> 'T
[<System.CLSCompliant(false)>]
static member AsRef : nativeptr<unit> -> 'T

형식 매개 변수

T

관리되는 포인터의 요소 형식입니다.

매개 변수

source
Void*

변환할 관리되지 않는 포인터입니다.

반환

T

형식의 값에 대한 관리되는 포인터입니다 T.

특성

설명

호출자는 결과 관리 포인터가 참조된 형식에 맞게 올바르게 정렬되었는지 확인해야 합니다. 맞춤 요구 사항에 대한 자세한 내용은 ECMA-335, Sec. I.12.6.2("맞춤")를 참조하세요.

적용 대상

AsRef<T>(T)

Source:
Unsafe.cs
Source:
Unsafe.cs
Source:
Unsafe.cs

지정된 읽기 전용 참조를 변경 가능한 참조로 다시 해석합니다.

public:
generic <typename T>
 static T % AsRef(T % source);
public static ref T AsRef<T> (in T source);
public static ref T AsRef<T> (scoped in T source);
public static ref T AsRef<T> (scoped ref T source);
public static ref T AsRef<T> (ref T source);
static member AsRef : 'T -> 'T
Public Shared Function AsRef(Of T) (ByRef source As T) As T

형식 매개 변수

T

참조의 기본 형식입니다.

매개 변수

source
T

재해석에 대한 읽기 전용 참조입니다.

반환

T

형식의 값에 대한 변경 가능한 참조입니다 T.

설명

이 API는 개념적으로 C++의 const_cast<>과 유사합니다. 참조된 위치에 데이터가 기록되지 않도록 하는 것은 호출자의 책임입니다. 런타임에는 읽기 전용 참조가 실제로 변경할 수 없다는 가정 하에 내부 논리가 포함되며, 이 고정을 위반하는 호출자는 런타임 내에서 정의되지 않은 동작을 트리거할 수 있습니다.

AsRef 는 일반적으로 변경 가능한 관리 포인터를 인수로 허용하는 와 같은 Add메서드에 읽기 전용 참조를 전달하는 데 사용됩니다. 아래 예제를 고려해 보세요.

int ComputeSumOfElements(ref int refToFirstElement, nint numElements)
{
  int sum = 0;
  for (nint i = 0; i < numElements; i++)
  {
    sum += Unsafe.Add(ref refToFirstElement, i);
  }
}

입력 매개 변수가 ref readonly int refToFirstElement 대신 ref int refToFirstElement이면 읽기 전용 참조를 에 대한 인수 Add로 사용할 수 없으므로 이전 예제는 컴파일되지 않습니다. 대신 AsRef 을 사용하여 불변성 제약 조건을 제거하고 다음 예제와 같이 컴파일이 성공하도록 허용할 수 있습니다.

int ComputeSumOfElements(ref readonly int refToFirstElement, nint numElements)
{
  int sum = 0;
  for (nint i = 0; i < numElements; i++)
  {
    sum += Unsafe.Add(ref Unsafe.AsRef(ref refToFirstElement), i);
  }
}

적용 대상