Unsafe.AsRef Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Overload
AsRef<T>(Void*) |
Converte un puntatore non gestito in un puntatore gestito in un valore di tipo |
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
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);
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
Parametri di tipo
- T
Tipo sottostante del riferimento.
Parametri
- source
- T
Riferimento di sola lettura da reinterpretare.
Restituisce
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);
}
}