Sdílet prostřednictvím


Unsafe.AsRef Metoda

Definice

Přetížení

AsRef<T>(Void*)

Převede nespravovaný ukazatel na spravovaný ukazatel na hodnotu typu T.

AsRef<T>(T)

Reinterpretuje daný odkaz jen pro čtení jako proměnlivý odkaz.

AsRef<T>(Void*)

Zdroj:
Unsafe.cs
Zdroj:
Unsafe.cs
Zdroj:
Unsafe.cs

Důležité

Toto rozhraní API neodpovídá specifikaci CLS.

Převede nespravovaný ukazatel na spravovaný ukazatel na hodnotu typu 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

Parametry typu

T

Typ prvku spravovaného ukazatele.

Parametry

source
Void*

Nespravovaný ukazatel, který chcete převést.

Návraty

T

Spravovaný ukazatel na hodnotu typu T.

Atributy

Poznámky

Volající zodpovídá za zajištění správného zarovnání výsledného spravovaného ukazatele pro odkazovaný typ. Další informace o požadavcích na sladění najdete v tématu ECMA-335, oddíl I.12.6.2 ("Sladění").

Platí pro

AsRef<T>(T)

Zdroj:
Unsafe.cs
Zdroj:
Unsafe.cs
Zdroj:
Unsafe.cs

Reinterpretuje daný odkaz jen pro čtení jako proměnlivý odkaz.

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

Parametry typu

T

Základní typ odkazu.

Parametry

source
T

Odkaz jen pro čtení, který se má reinterpretovat.

Návraty

T

Proměnlivý odkaz na hodnotu typu T.

Poznámky

Toto rozhraní API se koncepčně podobá jazyku const_cast<>C++ . Je odpovědností volajícího zajistit, aby se do odkazovaného umístění nezapisovala žádná data. Modul runtime obsahuje interní logiku, která vychází z předpokladu, že odkazy jen pro čtení jsou skutečně neměnné, a volající, kteří tuto invariantnost porušují, mohou v modulu runtime aktivovat nedefinované chování.

AsRef se obvykle používá k předávání odkazu jen pro čtení do metod, jako Addje , které přijímají proměnlivé spravované ukazatele jako argumenty. Představte si následující příklad.

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

Pokud je ref readonly int refToFirstElement vstupní parametr místo ref int refToFirstElement, předchozí příklad se nezkompiluje, protože odkazy jen pro čtení nelze použít jako argumenty pro Add. AsRef Místo toho lze použít k odebrání omezení neměnnosti a umožnění úspěšné kompilace, jak je znázorněno v následujícím příkladu.

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

Platí pro