Unsafe.AsRef Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Přetížení
AsRef<T>(Void*) |
Převede nespravovaný ukazatel na spravovaný ukazatel na hodnotu typu |
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
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
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);
}
}