RuntimeHelpers.GetObjectValue(Object) Método

Definição

Caixas são um tipo de valor.

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

Parâmetros

obj
Object

O tipo de valor a ser colocado na caixa.

Devoluções

Uma cópia em caixa de obj se for uma classe de valor; caso contrário, obj ele próprio.

Exemplos

O exemplo seguinte demonstra como encaixar 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

Observações

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.

Este 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 de retorno 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 devolve uma cópia superficial da classe, porque as classes de valor têm semântica de cópia.

  • Se o valor atribuído for uma classe de valor imutável, o método devolve o objeto em si, em vez de uma cópia da classe.

Compiladores de linguagens tipadas dinamicamente podem usar este método para garantir que os tipos de valor em caixa funcionam de forma idêntica aos tipos de valor não encaixados. Ou seja, os tipos de valor em caixa são clonados quando os passas entre eles, e são sempre passados por valor. O compilador pode chamar GetObjectValue para atribuir um tipo de valor a um objeto ou para passar um tipo de valor como parâmetro de um objeto tipo.

Este método é usado por compiladores.

Aplica-se a