Unsafe.Unbox<T>(Object) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
boxed 값에 대해 mutable ref
를 반환합니다.
public:
generic <typename T>
where T : value class static T % Unbox(System::Object ^ box);
public static ref T Unbox<T> (object box) where T : struct;
static member Unbox : obj -> 'T (requires 'T : struct)
Public Shared Function Unbox(Of T As Structure) (box As Object) As T
형식 매개 변수
- T
unboxed할 형식입니다.
매개 변수
- box
- Object
unboxing할 값입니다.
반환
boxed 값 box
에 대해 mutable ref
를 반환합니다.
예외
box
가 null
이며 T
는 nullable이 아닌 값 형식입니다.
T
을 찾을 수 없습니다.
설명
메서드는 Unbox<T>
IL unbox 명령에 대한 래퍼일 뿐입니다. 성능 최적화로 유용합니다. 를 사용하는 Object API가 값 형식의 다른 값으로 반복적으로 호출되어야 할 때마다 매번 새로 만들어지는 개체가 아니라 동일한 box 개체를 다시 사용할 수 있습니다.
메서드에는 Unbox<T>
언어 컴파일러에 의해 적용되지 않고 호출자의 책임인 중요한 사용 제약 조건이 있습니다. IL unbox
명령은 제어된 변경성 관리 포인터를 반환합니다. .NET 및 .NET 언어 컴파일러가 이 제약 조건을 나타낼 수 없으므로 메서드는 Unbox<T>
일반 변경 가능한 를 반환합니다 ref T
. 그러나 개발자는 변경 가능한 구조체 형식이 T
확실한 경우가 아니면 반환된 참조를 변경해서는 안 됩니다. 예를 들어 와 같은 Int32 숫자 기본 형식은 변경 가능한 구조체 형식이 아니므로 다음 코드는 지원되지 않습니다.
// The following line is NOT SUPPORTED.
Unsafe.Unbox<int>(obj) = 30;
반면 과 같은 Point 형식은 public 속성 setter가 있는 변경 가능한 구조체이므로 속성 setter를 호출하여 boxed 값을 변경하는 것이 지원됩니다.
// The following lines are legal and supported.
Unsafe.Unbox<System.Drawing.Point>(obj).X = 50;
Unsafe.Unbox<System.Drawing.Point>(obj).Y = 70;
그러나 참조가 변경 가능한 구조체 형식인 경우에도 전체 참조 도매를 바꾸는 것은 지원되지 않습니다.
// Resetting the reference to default(T) is NOT SUPPORTED.
Unsafe.Unbox<System.Drawing.Point>(obj) = default(System.Drawing.Point);
// Setting the reference to a completely new value is NOT SUPPORTED.
Unsafe.Unbox<System.Drawing.Point>(obj) = new System.Drawing.Point(50, 70);
이 명령의 사용 제약 조건에 대한 자세한 설명을 포함하여 자세한 내용은 ECMA-335: CLI(공용 언어 인프라)의 III.1.8.1.2.2("제어된 변경성 관리 포인터") 및 III.4.32("unbox -- boxed 값 형식을 원시 형식으로 변환") 섹션을 참조하세요.
적용 대상
.NET