Udostępnij za pośrednictwem


Unsafe.AsRef Metoda

Definicja

Przeciążenia

AsRef<T>(Void*)

Konwertuje niezarządzany wskaźnik na zarządzany wskaźnik na wartość typu T.

AsRef<T>(T)

Ponownie interpretuje podane odwołanie tylko do odczytu jako odwołanie modyfikowalne.

AsRef<T>(Void*)

Źródło:
Unsafe.cs
Źródło:
Unsafe.cs
Źródło:
Unsafe.cs

Ważne

Ten interfejs API nie jest zgodny ze specyfikacją CLS.

Konwertuje niezarządzany wskaźnik na zarządzany wskaźnik na wartość 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 elementalny zarządzanego wskaźnika.

Parametry

source
Void*

Niezarządzany wskaźnik do konwersji.

Zwraca

T

Zarządzany wskaźnik na wartość typu T.

Atrybuty

Uwagi

Obiekt wywołujący jest odpowiedzialny za upewnienie się, że wynikowy zarządzany wskaźnik jest prawidłowo wyrównany do typu, do którego odwołuje się odwołanie. Aby uzyskać więcej informacji na temat wymagań dotyczących wyrównania, zobacz ECMA-335, s. I.12.6.2 ("Wyrównanie").

Dotyczy

AsRef<T>(T)

Źródło:
Unsafe.cs
Źródło:
Unsafe.cs
Źródło:
Unsafe.cs

Ponownie interpretuje podane odwołanie tylko do odczytu jako odwołanie modyfikowalne.

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

Parametry typu

T

Podstawowy typ odwołania.

Parametry

source
T

Odwołanie tylko do odczytu do ponownej interpretacji.

Zwraca

T

Modyfikowalne odwołanie do wartości typu T.

Uwagi

Ten interfejs API jest koncepcyjnie podobny do języka C++.const_cast<> Obiekt wywołujący odpowiada za zapewnienie, że żadne dane nie są zapisywane w lokalizacji, do którego się odwołujesz. Środowisko uruchomieniowe zawiera logikę wewnętrzną wskazaną na założenie, że odwołania tylko do odczytu są niezmienne, a wywołujący, którzy naruszają tę niezmienność, mogą wyzwalać niezdefiniowane zachowanie w środowisku uruchomieniowym.

AsRef Jest zwykle używany do przekazywania odwołania tylko do odczytu do metod, takich jak Add, które akceptują modyfikowalne zarządzane wskaźniki jako argumenty. Rozważmy następujący przykład.

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

Jeśli parametr wejściowy jest ref readonly int refToFirstElement zamiast ref int refToFirstElement, poprzedni przykład nie zostanie skompilowany, ponieważ odwołania tylko do odczytu nie mogą być używane jako argumenty do Add. Zamiast tego można użyć polecenia , AsRef aby usunąć ograniczenie niezmienności i umożliwić pomyślne kompilowanie, jak pokazano w poniższym przykładzie.

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

Dotyczy