Unsafe.AsRef Método

Definición

Sobrecargas

AsRef<T>(Void*)

Convierte un puntero no administrado en un puntero administrado en un valor de tipo T.

AsRef<T>(T)

Reinterpreta la referencia de solo lectura dada como referencia mutable.

AsRef<T>(Void*)

Source:
Unsafe.cs
Source:
Unsafe.cs
Source:
Unsafe.cs

Importante

Esta API no es conforme a CLS.

Convierte un puntero no administrado en un puntero administrado en un valor de tipo T.

public:
generic <typename T>
 static T % AsRef(void* source);
public static ref T AsRef<T> (void* source);
[System.CLSCompliant(false)]
public static ref T AsRef<T> (void* source);
static member AsRef : nativeptr<unit> -> 'T
[<System.CLSCompliant(false)>]
static member AsRef : nativeptr<unit> -> 'T

Parámetros de tipo

T

Tipo elemental del puntero administrado.

Parámetros

source
Void*

Puntero no administrado que se va a convertir.

Devoluciones

T

Puntero administrado a un valor de tipo T.

Atributos

Comentarios

El autor de la llamada es responsable de garantizar que el puntero administrado resultante esté alineado correctamente para el tipo al que se hace referencia. Para obtener más información sobre los requisitos de alineación, consulte ECMA-335, Sec. I.12.6.2 ("Alignment").

Se aplica a

AsRef<T>(T)

Source:
Unsafe.cs
Source:
Unsafe.cs
Source:
Unsafe.cs

Reinterpreta la referencia de solo lectura dada como referencia mutable.

public:
generic <typename T>
 static T % AsRef(T % source);
public static ref T AsRef<T> (in T source);
public static ref T AsRef<T> (scoped in T source);
public static ref T AsRef<T> (scoped ref T source);
static member AsRef : 'T -> 'T
Public Shared Function AsRef(Of T) (ByRef source As T) As T

Parámetros de tipo

T

Tipo subyacente de la referencia.

Parámetros

source
T

Referencia de solo lectura que se reinterpretará.

Devoluciones

T

Referencia mutable a un valor de tipo T.

Comentarios

Esta API es conceptualmente similar a la de const_cast<>C++. Es responsabilidad del autor de la llamada asegurarse de que no se escribe ningún dato en la ubicación a la que se hace referencia. El tiempo de ejecución contiene lógica interna predefinida en la suposición de que las referencias de solo lectura son verdaderamente inmutables y los autores de llamadas que infringen esta invariable pueden desencadenar un comportamiento indefinido dentro del tiempo de ejecución.

AsRef normalmente se usa para pasar una referencia de solo lectura a métodos como Add, que aceptan punteros administrados mutables como argumentos. Considere el ejemplo siguiente.

int ComputeSumOfElements(ref int refToFirstElement, nint numElements)
{
  int sum = 0;
  for (nint i = 0; i < numElements; i++)
  {
    sum += Unsafe.Add(ref refToFirstElement, i);
  }
}

Si el parámetro de entrada es ref readonly int refToFirstElement en lugar de ref int refToFirstElement, el ejemplo anterior no se compilará, ya que las referencias de solo lectura no se pueden usar como argumentos para Add. En su lugar, AsRef se puede usar para quitar la restricción de inmutabilidad y permitir que la compilación se realice correctamente, como se muestra en el ejemplo siguiente.

int ComputeSumOfElements(ref readonly int refToFirstElement, nint numElements)
{
  int sum = 0;
  for (nint i = 0; i < numElements; i++)
  {
    sum += Unsafe.Add(ref Unsafe.AsRef(ref refToFirstElement), i);
  }
}

Se aplica a