Compartir a través de


RuntimeHelpers.GetObjectValue(Object) Método

Definición

Encuadra un 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

Tipo de valor que se va a encuadrar.

Devoluciones

Copia encuadrada de obj en el caso de que sea una clase de valor; de lo contrario, se devuelve el propio obj.

Ejemplos

En el ejemplo siguiente se muestra cómo boxear una clase de valor mediante el 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

Comentarios

La conversión boxing de un tipo de valor crea un objeto y realiza una copia superficial de los campos del tipo de valor especificado en el nuevo objeto.

Este método permite manipular una clase de valor como un objeto mientras conserva el comportamiento de alias de una clase de valor.

El valor devuelto depende de si la clase de valor es mutable o inmutable:

  • Si el valor que se asigna es una clase de valor mutable, el método devuelve una copia superficial de la clase , porque las clases de valor tienen semántica de copia.

  • Si el valor que se asigna es una clase de valor inmutable, el método devuelve el propio objeto, en lugar de una copia de la clase .

Los compiladores de lenguajes con tipo dinámico pueden usar este método para asegurarse de que los tipos de valor con conversión boxing funcionan de forma idéntica a los tipos de valor sin conversión boxing. Es decir, los tipos de valor con conversión boxed se clonan al pasarlos y siempre se pasan por valor. El compilador puede llamar GetObjectValue a para asignar un tipo de valor a un objeto o para pasar un tipo de valor como parámetro de un objeto de tipo.

Los compiladores usan este método.

Se aplica a