Unsafe.AsRef Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Surcharges
AsRef<T>(Void*) |
Convertit un pointeur non managé en pointeur managé en une valeur de type |
AsRef<T>(T) |
Réinterpréte la référence en lecture seule donnée en tant que référence mutable. |
AsRef<T>(Void*)
- Source:
- Unsafe.cs
- Source:
- Unsafe.cs
- Source:
- Unsafe.cs
Important
Cette API n’est pas conforme CLS.
Convertit un pointeur non managé en pointeur managé en une valeur de type 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
Paramètres de type
- T
Type élément du pointeur managé.
Paramètres
- source
- Void*
Pointeur non managé à convertir.
Retours
Pointeur managé vers une valeur de type T
.
- Attributs
Remarques
L’appelant est chargé de s’assurer que le pointeur managé résultant est correctement aligné pour le type référencé. Pour plus d’informations sur les exigences d’alignement, consultez ECMA-335, sec. I.12.6.2 (« Alignement »).
S’applique à
AsRef<T>(T)
- Source:
- Unsafe.cs
- Source:
- Unsafe.cs
- Source:
- Unsafe.cs
Réinterpréte la référence en lecture seule donnée en tant que référence mutable.
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
Paramètres de type
- T
Type sous-jacent de la référence.
Paramètres
- source
- T
Référence en lecture seule à réinterpréter.
Retours
Référence mutable à une valeur de type T
.
Remarques
Cette API est conceptuellement similaire à celle de const_cast<>
C++ . Il incombe à l’appelant de s’assurer qu’aucune donnée n’est écrite dans l’emplacement référencé. Le runtime contient une logique interne basée sur l’hypothèse que les références en lecture seule sont réellement immuables, et que les appelants qui violent cet invariant peuvent déclencher un comportement non défini au sein du runtime.
AsRef
est généralement utilisé pour passer une référence en lecture seule dans des méthodes telles que Add, qui acceptent les pointeurs managés mutables en tant qu’arguments. Considérez l'exemple suivant.
int ComputeSumOfElements(ref int refToFirstElement, nint numElements)
{
int sum = 0;
for (nint i = 0; i < numElements; i++)
{
sum += Unsafe.Add(ref refToFirstElement, i);
}
}
Si le paramètre d’entrée est ref readonly int refToFirstElement
à la place de ref int refToFirstElement
, l’exemple précédent ne sera pas compilé, car les références en lecture seule ne peuvent pas être utilisées comme arguments à Add
. Au lieu de cela, AsRef
vous pouvez utiliser pour supprimer la contrainte d’immuabilité et permettre à la compilation de réussir, comme illustré dans l’exemple suivant.
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);
}
}