Unsafe.AsRef Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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 |
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
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
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").