Condividi tramite


RuntimeHelpers.GetObjectValue(Object) Metodo

Definizione

Esegue la conversione boxing di un tipo di valore.

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

Parametri

obj
Object

Tipo di valore di cui eseguire la conversione boxing.

Restituisce

Copia boxed di obj se è una classe di valori. In caso contrario, obj stesso.

Esempio

Nell'esempio seguente viene illustrato come eseguire la casella di una classe valore usando il GetObjectValue metodo .

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

Commenti

La conversione boxing di un tipo valore crea un oggetto ed esegue una copia superficiale dei campi del tipo di valore specificato nel nuovo oggetto.

Questo metodo consente di modificare una classe valore come oggetto mantenendo il comportamento di aliasing di una classe valore.

Il valore restituito dipende dal fatto che la classe value sia modificabile o non modificabile:

  • Se il valore assegnato è una classe valore modificabile, il metodo restituisce una copia superficiale della classe, perché le classi valore hanno una semantica di copia.

  • Se il valore assegnato è una classe valore non modificabile, il metodo restituisce l'oggetto stesso, anziché una copia della classe .

I compilatori di linguaggi tipizzato in modo dinamico possono usare questo metodo per assicurarsi che i tipi valore boxed funzionino in modo identico ai tipi valore senzaboxing. Ovvero, i tipi valore boxed vengono clonati quando vengono passati e vengono sempre passati per valore. Il compilatore può chiamare GetObjectValue per assegnare un tipo valore a un oggetto o per passare un tipo valore come parametro di un oggetto di tipo.

Questo metodo viene usato dai compilatori.

Si applica a