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í.
Boxe un 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
Tipo de valor que se va a boxear.
Devoluciones
Copia boxada de obj si es una clase de valor; de lo contrario, obj sí mismo.
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, ya que 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 de tipos dinámicos pueden usar este método para asegurarse de que los tipos de valor boxed funcionan de forma idéntica a los tipos de valor sin colocar. Es decir, los tipos de valor 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.