다음을 통해 공유


RuntimeHelpers.GetObjectValue(Object) 메서드

정의

값 형식을 상자에 넣습니다.

public:
 static System::Object ^ GetObjectValue(System::Object ^ obj);
public static object GetObjectValue (object obj);
public static object? GetObjectValue (object? obj);
static member GetObjectValue : obj -> obj
Public Shared Function GetObjectValue (obj As Object) As Object

매개 변수

obj
Object

상자에 넣을 값 형식입니다.

반환

값 형식이 값 클래스이면 obj의 boxed 사본이고, 그렇지 않으면 obj 자체입니다.

예제

다음 예제에서는 메서드를 사용하여 값 클래스를 상자로 지정하는 GetObjectValue 방법을 보여 줍니다.

using System;
using System.Runtime.CompilerServices;

// Declare a value type.
struct Point2I
{
    public int x;
    public int y;
}

class Program
{

    static void Main(string[] args)
    {
        // Allocate an unboxed Point2I (not on the heap).
        Point2I pnt;
        pnt.x = 0;
        pnt.y = 0;

        // Box the value.  (Put it in the heap.)
        object objPntr = RuntimeHelpers.GetObjectValue(pnt);
    }
}
Imports System.Runtime.CompilerServices

' Declare a value type.
Structure Point2I

    Dim x As Integer
    Dim y As Integer
End Structure

Module Program

    Sub Main(ByVal args() As String)


        ' Allocate an unboxed Point2I (not on the heap).
        Dim pnt As Point2I
        pnt.x = 0
        pnt.y = 0

        ' Box the value.  (Put it in the heap.)
        Dim objPntr As Object = RuntimeHelpers.GetObjectValue(pnt)
    End Sub


End Module

설명

값 형식을 Boxing하면 개체가 만들어지고 지정된 값 형식의 필드가 새 개체에 단순하게 복사됩니다.

이 메서드를 사용하면 값 클래스의 별칭 동작을 유지하면서 값 클래스를 개체로 조작할 수 있습니다.

반환 값은 값 클래스가 변경 가능할지 변경할 수 있는지에 따라 달라집니다.

  • 할당되는 값이 변경 가능한 값 클래스인 경우 값 클래스에는 복사 의미 체계가 있으므로 메서드는 클래스의 단순 복사본을 반환합니다.

  • 할당되는 값이 변경할 수 없는 값 클래스인 경우 메서드는 클래스의 복사본 대신 개체 자체를 반환합니다.

동적으로 형식화된 언어의 컴파일러에서 이 메서드를 사용하여 박스형 값 형식이 언박싱되지 않은 값 형식과 동일하게 작동하는지 확인할 수 있습니다. 즉, 상자가 있는 값 형식은 전달하면 복제되며 항상 값으로 전달됩니다. 컴파일러는 를 호출 GetObjectValue 하여 개체에 값 형식을 할당하거나 값 형식을 형식 개체의 매개 변수로 전달할 수 있습니다.

이 메서드는 컴파일러에서 사용됩니다.

적용 대상