Compartilhar via


Unsafe.AsRef Método

Definição

Sobrecargas

AsRef<T>(Void*)

Converte um ponteiro não gerenciado em um ponteiro gerenciado em um valor do tipo T.

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

T

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

T

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

Aplica-se a