RuntimeHelpers.GetObjectValue(Object) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
値型をボックスにします。
public:
static System::Object ^ GetObjectValue(System::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が値クラスの場合はボックス化されたコピー。それ以外の場合は、それ自体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 を呼び出して、値型をオブジェクトに割り当てたり、値型を型オブジェクトのパラメーターとして渡すことができます。
このメソッドはコンパイラによって使用されます。