Поделиться через


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

Упаковываемый тип значения.

Возвращаемое значение

Упакованная копия 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 метод , чтобы назначить тип значения объекту или передать тип значения в качестве параметра объекта типа.

Этот метод используется компиляторами.

Применяется к