Unsafe.AsRef Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Sobrecargas
AsRef<T>(Void*) |
Convierte un puntero no administrado en un puntero administrado en un valor de tipo |
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
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> (ref 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
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);
}
}