Unsafe.AsRef Metodo

Definizione

Overload

AsRef<T>(Void*)

Converte un puntatore non gestito in un puntatore gestito in un valore di tipo T.

AsRef<T>(T)

Reinterpreta il riferimento di sola lettura specificato come riferimento modificabile.

AsRef<T>(Void*)

Origine:
Unsafe.cs
Origine:
Unsafe.cs
Origine:
Unsafe.cs

Importante

Questa API non è conforme a CLS.

Converte un puntatore non gestito in un puntatore gestito in un valore di 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

Parametri di tipo

T

Tipo di elemento del puntatore gestito.

Parametri

source
Void*

Puntatore non gestito da convertire.

Restituisce

T

Puntatore gestito a un valore di tipo T.

Attributi

Commenti

Il chiamante è responsabile della corretta allineamento del puntatore gestito risultante per il tipo a cui si fa riferimento. Per altre informazioni sui requisiti di allineamento, vedere ECMA-335, Sec. I.12.6.2 ("Allineamento").

Si applica a

AsRef<T>(T)

Origine:
Unsafe.cs
Origine:
Unsafe.cs
Origine:
Unsafe.cs

Reinterpreta il riferimento di sola lettura specificato come riferimento modificabile.

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);
static member AsRef : 'T -> 'T
Public Shared Function AsRef(Of T) (ByRef source As T) As T

Parametri di tipo

T

Tipo sottostante del riferimento.

Parametri

source
T

Riferimento di sola lettura da reinterpretare.

Restituisce

T

Riferimento modificabile a un valore di tipo T.

Commenti

Questa API è concettualmente simile a quella di const_cast<>C++. È responsabilità del chiamante assicurarsi che nessun dato venga scritto nella posizione a cui si fa riferimento. Il runtime contiene la logica interna predicata sul presupposto che i riferimenti di sola lettura siano veramente non modificabili e i chiamanti che violano questo comportamento invariante possono attivare un comportamento non definito all'interno del runtime.

AsRef viene in genere usato per passare un riferimento readonly a metodi come Add, che accettano puntatori gestiti modificabili come argomenti. Si consideri l'esempio seguente.

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

Se il parametro di input è ref readonly int refToFirstElement invece di ref int refToFirstElement, l'esempio precedente non verrà compilato, poiché i riferimenti readonly non possono essere usati come argomenti per Add. È invece AsRef possibile usare per rimuovere il vincolo di non modificabilità e consentire alla compilazione di avere esito positivo, come illustrato nell'esempio seguente.

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

Si applica a