Unsafe.AsRef Méthode

Définition

Surcharges

AsRef<T>(Void*)

Convertit un pointeur non managé en pointeur managé en une valeur de type T.

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

T

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

T

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

S’applique à