Unsafe.AsRef 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
오버로드
AsRef<T>(Void*) |
관리되지 않는 포인터를 형식 |
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
.
- 특성
설명
호출자는 결과 관리 포인터가 참조된 형식에 맞게 올바르게 정렬되었는지 확인해야 합니다. 맞춤 요구 사항에 대한 자세한 내용은 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> (ref T source);
public static ref T AsRef<T> (scoped in T source);
public static ref T AsRef<T> (scoped ref T source);
static member AsRef : 'T -> 'T
Public Shared Function AsRef(Of T) (ByRef source As T) As T
형식 매개 변수
- T
참조의 기본 형식입니다.
매개 변수
- source
- 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);
}
}
적용 대상
.NET