RuntimeHelpers.GetObjectValue(Object) Metodo

Definizione

Riquadri un tipo di valore.

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

Parametri

obj
Object

Tipo di valore da boxing.

Valori restituiti

Copia boxed di obj se è una classe valore; in caso contrario, obj se stessa.

Esempio

Nell'esempio seguente viene illustrato come eseguire la casella di una classe di valori 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 unboxed. 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 di valore a un oggetto o per passare un tipo di valore come parametro di un oggetto di tipo.

Questo metodo viene usato dai compilatori.

Si applica a