Freigeben über


Unsafe.AsRef Methode

Definition

Überlädt

AsRef<T>(Void*)

Konvertiert einen nicht verwalteten Zeiger in einen verwalteten Zeiger in einen Wert vom Typ T.

AsRef<T>(T)

Interpretiert den angegebenen schreibgeschützten Verweis als veränderlichen Verweis neu.

AsRef<T>(Void*)

Quelle:
Unsafe.cs
Quelle:
Unsafe.cs
Quelle:
Unsafe.cs

Wichtig

Diese API ist nicht CLS-kompatibel.

Konvertiert einen nicht verwalteten Zeiger in einen verwalteten Zeiger in einen Wert vom Typ 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

Typparameter

T

Der Elementtyp des verwalteten Zeigers.

Parameter

source
Void*

Der zu konvertierende nicht verwaltete Zeiger.

Gibt zurück

T

Ein verwalteter Zeiger auf einen Wert vom Typ T.

Attribute

Hinweise

Der Aufrufer ist dafür verantwortlich, sicherzustellen, dass der resultierende verwaltete Zeiger für den Typ, auf den verwiesen wird, ordnungsgemäß ausgerichtet ist. Weitere Informationen zu den Ausrichtungsanforderungen finden Sie unter ECMA-335, Abschnitt I.12.6.2 ("Ausrichtung").

Gilt für:

AsRef<T>(T)

Quelle:
Unsafe.cs
Quelle:
Unsafe.cs
Quelle:
Unsafe.cs

Interpretiert den angegebenen schreibgeschützten Verweis als veränderlichen Verweis neu.

public:
generic <typename T>
 static T % AsRef(T % source);
public static ref T AsRef<T> (in T source);
public static ref T AsRef<T> (ref 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

Typparameter

T

Der zugrunde liegende Typ des Verweises.

Parameter

source
T

Der schreibgeschützte Verweis, der neu interpretiert werden soll.

Gibt zurück

T

Ein veränderlicher Verweis auf einen Wert vom Typ T.

Hinweise

Diese API ähnelt vom Konzept her der von const_cast<>C++. Es liegt in der Verantwortung des Aufrufers sicherzustellen, dass keine Daten an den Speicherort geschrieben werden, auf den verwiesen wird. Die Laufzeit enthält interne Logik, die davon ausgegangen wird, dass schreibgeschützte Verweise wirklich unveränderlich sind, und Aufrufer, die gegen diese Invariante verstoßen, können ein undefiniertes Verhalten innerhalb der Laufzeit auslösen.

AsRef wird in der Regel verwendet, um einen schreibgeschützten Verweis an Methoden wie Addzu übergeben, die veränderliche verwaltete Zeiger als Argumente akzeptieren. Betrachten Sie das folgende Beispiel.

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

Wenn der Eingabeparameter anstelle von ref int refToFirstElementistref readonly int refToFirstElement, wird im vorherigen Beispiel nicht kompiliert, da schreibgeschützte Verweise nicht als Argumente für Addverwendet werden können. Stattdessen kann verwendet werden, AsRef um die Unveränderlichkeitseinschränkung zu entfernen und eine erfolgreiche Kompilierung zuzulassen, wie im folgenden Beispiel gezeigt.

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

Gilt für: