RuntimeHelpers.GetObjectValue(Object) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.