RuntimeHelpers.GetObjectValue(Object) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
對實值類型進行 Box 動作。
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
要進行 Box 的實值類型。
傳回
如果是值類別,則為 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 實值類型會建立 物件,並將指定實值型別欄位的淺層複本執行到新的物件中。
這個方法可讓實值類別當做物件操作,同時保留實值類別的別名行為。
傳回值取決於值類別是可變還是不可變:
如果指派的值是可變動的值類別,則方法會傳回類別的淺層複本,因為值類別具有複製語意。
如果指派的值是不可變的值類別,則方法會傳回物件本身,而不是類別的複本。
動態類型語言的編譯程式可以使用這個方法,確保 Boxed 實值型別與未收件匣實值型別相同。 也就是說,當您四處傳遞這些類型時,會複製Boxed實值型別,而且一律會以值傳遞。 編譯程式可以呼叫 GetObjectValue 以將實值型別指派給物件,或將實值型別當做型別對象的參數傳遞。
編譯程式會使用這個方法。