RuntimeHelpers.GetObjectValue(Object) Método

Definição

Demarca como um tipo de valor.

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

Parâmetros

obj
Object

O tipo de valor a ser demarcado.

Retornos

Uma cópia demarcada do obj se for uma classe de valor; caso contrário, o próprio obj.

Exemplos

O exemplo a seguir demonstra como fazer a caixa de uma classe de valor usando o GetObjectValue método .

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

Comentários

O boxing de um tipo de valor cria um objeto e executa uma cópia superficial dos campos do tipo de valor especificado no novo objeto.

Esse método permite que uma classe de valor seja manipulada como um objeto enquanto mantém o comportamento de aliasing de uma classe de valor.

O valor retornado depende se a classe de valor é mutável ou imutável:

  • Se o valor atribuído for uma classe de valor mutável, o método retornará uma cópia superficial da classe , pois as classes de valor têm semântica de cópia.

  • Se o valor que está sendo atribuído for uma classe de valor imutável, o método retornará o próprio objeto, em vez de uma cópia da classe .

Os compiladores de linguagens de tipo dinâmico podem usar esse método para garantir que os tipos de valor em caixa funcionem de forma idêntica aos tipos de valor sem caixa. Ou seja, os tipos de valor em caixa são clonados quando você os passa e eles são sempre passados por valor. O compilador pode chamar GetObjectValue para atribuir um tipo de valor a um objeto ou passar um tipo de valor como um parâmetro de um objeto de tipo.

Esse método é usado por compiladores.

Aplica-se a