RuntimeHelpers.GetObjectValue(Object) Metoda

Definicja

Pola typu wartości.

C#
public static object GetObjectValue(object obj);
C#
public static object? GetObjectValue(object? obj);

Parametry

obj
Object

Typ wartości, który ma być pola.

Zwraca

Kopia pola, obj jeśli jest klasą wartości; w przeciwnym razie obj sama.

Przykłady

W poniższym przykładzie pokazano, jak polecić klasę wartości przy użyciu GetObjectValue metody .

C#
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);
    }
}

Uwagi

Typ wartości boxing tworzy obiekt i wykonuje płytkią kopię pól określonego typu wartości do nowego obiektu.

Ta metoda umożliwia manipulowanie klasą wartości jako obiekt, zachowując zachowanie aliasu klasy wartości.

Wartość zwracana zależy od tego, czy klasa wartości jest niezmienna, czy niezmienna:

  • Jeśli przypisana wartość jest klasą wartości modyfikowalnej, metoda zwraca płytkią kopię klasy, ponieważ klasy wartości mają semantyka kopiowania.

  • Jeśli przypisana wartość jest niezmienną klasą wartości, metoda zwraca sam obiekt zamiast kopii klasy.

Kompilatory dynamicznie typowanych języków mogą używać tej metody, aby upewnić się, że typy wartości w polu działają identycznie z typami wartości rozpędzonych. Oznacza to, że typy wartości w polu są klonowane po przekazaniu ich i są zawsze przekazywane przez wartość. Kompilator może wywołać metodę GetObjectValue przypisywania typu wartości do obiektu lub przekazać typ wartości jako parametr obiektu typu.

Ta metoda jest używana przez kompilatory.

Dotyczy

Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0