Unsafe.AsRef Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Sobrecargas
AsRef<T>(Void*) |
Converte um ponteiro não gerenciado em um ponteiro gerenciado em um valor do tipo |
AsRef<T>(T) |
Reinterpreta a referência somente leitura fornecida como uma referência mutável. |
AsRef<T>(Void*)
- Origem:
- Unsafe.cs
- Origem:
- Unsafe.cs
- Origem:
- Unsafe.cs
Importante
Esta API não está em conformidade com CLS.
Converte um ponteiro não gerenciado em um ponteiro gerenciado em um valor do 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
O tipo elemental do ponteiro gerenciado.
Parâmetros
- source
- Void*
O ponteiro não gerenciado a ser convertido.
Retornos
Um ponteiro gerenciado para um valor do tipo T
.
- Atributos
Comentários
O chamador é responsável por garantir que o ponteiro gerenciado resultante esteja alinhado corretamente para o tipo referenciado. Para obter mais informações sobre requisitos de alinhamento, consulte ECMA-335, S. I.12.6.2 ("Alinhamento").
Aplica-se a
AsRef<T>(T)
- Origem:
- Unsafe.cs
- Origem:
- Unsafe.cs
- Origem:
- Unsafe.cs
Reinterpreta a referência somente leitura fornecida como uma referência mutável.
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);
public static ref T AsRef<T> (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
O tipo subjacente da referência.
Parâmetros
- source
- T
A referência somente leitura a ser reinterpretada.
Retornos
Uma referência mutável a um valor do tipo T
.
Comentários
Essa API é conceitualmente semelhante à do const_cast<>
C++. É responsabilidade do chamador garantir que nenhum dado seja gravado no local referenciado. O runtime contém lógica interna baseada na suposição de que as referências somente leitura realmente são imutáveis e os chamadores que violam essa invariável podem disparar um comportamento indefinido dentro do runtime.
AsRef
normalmente é usado para passar uma referência somente leitura em métodos como Add, que aceitam ponteiros gerenciados 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 será compilado, pois as referências somente 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 seja bem-sucedida, conforme mostrado no exemplo a seguir.
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);
}
}