Unsafe.AsRef Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Przeciążenia
AsRef<T>(Void*) |
Konwertuje niezarządzany wskaźnik na zarządzany wskaźnik na wartość typu |
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
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
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);
}
}