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

ボックスに格納する値型。

戻り値

Object

値クラスの場合は obj のボックス化されたコピー。それ以外の場合は 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

注釈

値型をボックス化すると、オブジェクトが作成され、指定した値型のフィールドの簡易コピーが新しいオブジェクトに実行されます。

このメソッドは、値クラスのエイリアス動作を保持しながら、値クラスをオブジェクトとして操作できるようにします。

戻り値は、値クラスが変更可能であるか不変であるかによって異なります。

  • 割り当てられている値が変更可能な値クラスである場合、値クラスにはコピーのセマンティクスがあるため、メソッドはクラスの簡易コピーを返します。

  • 割り当てられている値が変更できない値クラスの場合、メソッドは、クラスのコピーではなく、オブジェクト自体を返します。

動的に型指定された言語のコンパイラでは、このメソッドを使用して、ボックス化された値型がボックス化されていない値型とまったく同じように動作する つまり、ボックス化された値型は、それらを渡すときに複製され、常に値によって渡されます。 コンパイラは、 GetObjectValue を呼び出して、値型をオブジェクトに割り当てるか、型オブジェクトのパラメーターとして値型を渡すことができます。

このメソッドは、コンパイラによって使用されます。

適用対象