RuntimeHelpers.GetObjectValue(Object) Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Boxes a value type.
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
Parameters
- obj
- Object
The value type to be boxed.
Returns
A boxed copy of obj
if it is a value class; otherwise, obj
itself.
Examples
The following example demonstrates how to box a value class by using the GetObjectValue method.
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
Remarks
Boxing a value type creates an object and performs a shallow copy of the fields of the specified value type into the new object.
This method allows a value class to be manipulated as an object while it retains the aliasing behavior of a value class.
The return value depends on whether the value class is mutable or immutable:
If the value being assigned is a mutable value class, the method returns a shallow copy of the class, because value classes have copy semantics.
If the value being assigned is an immutable value class, the method returns the object itself, instead of a copy of the class.
Compilers of dynamically typed languages can use this method to make sure that boxed value types work identically to unboxed value types. That is, boxed value types get cloned when you pass them around, and they are always passed by value. The compiler can call GetObjectValue to assign a value type to an object or to pass a value type as a parameter of a type object.
This method is used by compilers.