RuntimeHelpers.GetObjectValue(Object) Methode

Definition

Felder einen Werttyp.

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

Parameter

obj
Object

Der Werttyp, der eingefeldt werden soll.

Gibt zurück

Eine geschachtelte Kopie davon obj , ob es sich um eine Wertklasse handelt, obj andernfalls selbst.

Beispiele

Im folgenden Beispiel wird das Boxen einer Wertklasse mithilfe der GetObjectValue Methode veranschaulicht.

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

Hinweise

Durch das Boxen eines Werttyps wird ein Objekt erstellt und eine flache Kopie der Felder des angegebenen Werttyps in das neue Objekt ausgeführt.

Mit dieser Methode kann eine Wertklasse als Objekt bearbeitet werden, während sie das Aliasingverhalten einer Wertklasse beibehält.

Der Rückgabewert hängt davon ab, ob die Wertklasse änderbar oder unveränderlich ist:

  • Wenn der zugewiesene Wert eine veränderbare Wertklasse ist, gibt die Methode eine flache Kopie der Klasse zurück, da Wertklassen eine Kopiersemantik aufweisen.

  • Wenn der zugewiesene Wert eine unveränderliche Wertklasse ist, gibt die Methode das Objekt selbst anstelle einer Kopie der Klasse zurück.

Compiler von dynamisch typierten Sprachen können diese Methode verwenden, um sicherzustellen, dass boxed value types identisch mit unboxed value types funktionieren. Das heißt, boxed value types get cloned when you pass them around, and they are always passed by value. Der Compiler kann aufrufen GetObjectValue , um einem Objekt einen Werttyp zuzuweisen oder einen Werttyp als Parameter eines Typobjekts zu übergeben.

Diese Methode wird von Compilern verwendet.

Gilt für: