Unsafe.AsRef Método

Definição

Sobrecargas

Name Description
AsRef<T>(T)

Reinterpreta a referência apenas de leitura dada como uma referência mutável.

AsRef<T>(Void*)

Converte um ponteiro não gerido num ponteiro gerido para um valor do tipo T.

AsRef<T>(T)

Origem:
Unsafe.cs
Origem:
Unsafe.cs
Origem:
Unsafe.cs
Origem:
Unsafe.cs
Origem:
Unsafe.cs

Reinterpreta a referência apenas de leitura dada como uma referência mutável.

public:
generic <typename T>
 static T % AsRef(T % source);
public static ref T AsRef<T>(scoped ref readonly T source) where T : allows ref struct;
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 readonly T source);
static member AsRef : 'T -> 'T
Public Shared Function AsRef(Of T) (ByRef source As T) As T

Parâmetros de Tipo Genérico

T

O tipo subjacente da referência.

Parâmetros

source
T

A referência apenas de leitura para reinterpretar.

Devoluções

T

Uma referência mutável a um valor do tipo T.

Observações

Esta API é conceptualmente semelhante à const_cast<>de C++ . É responsabilidade do interlocutor garantir que nenhum dado é escrito na localização referenciada. O runtime contém lógica interna baseada na suposição de que as referências apenas de leitura são realmente imutáveis, e os chamadores que violam este invariante podem desencadear comportamentos indefinidos dentro do runtime.

AsRef é tipicamente usado para passar uma referência apenas de leitura para métodos como Add, que aceitam ponteiros geridos mutáveis como argumentos. Considere o exemplo a seguir.

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

Se o parâmetro de entrada for ref readonly int refToFirstElement em vez de ref int refToFirstElement, o exemplo anterior não compilará, pois referências apenas de leitura não podem ser usadas como argumentos para Add. Em vez disso, AsRef pode ser usado para remover a restrição de imutabilidade e permitir que a compilação tenha sucesso, como mostrado no exemplo seguinte.

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);
 }
}

Aplica-se a

AsRef<T>(Void*)

Origem:
Unsafe.cs
Origem:
Unsafe.cs
Origem:
Unsafe.cs
Origem:
Unsafe.cs
Origem:
Unsafe.cs

Importante

Esta API não está em conformidade com CLS.

Converte um ponteiro não gerido num ponteiro gerido para um valor do tipo T.

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

Parâmetros de Tipo Genérico

T

O tipo elemental do ponteiro gerido.

Parâmetros

source
Void*

O apontador não gerido para converter.

Devoluções

T

Um apontador gerido para um valor do tipo T.

Atributos

Observações

O chamador é responsável por garantir que o ponteiro gerido resultante está devidamente alinhado para o tipo referenciado. Para mais informações sobre os requisitos de alinhamento, consulte ECMA-335, Sec. I.12.6.2 ("Alinhamento").

Aplica-se a