RuntimeHelpers.GetObjectValue(Object) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.