Share via


Unsafe.AsRef Metode

Definisi

Overload

AsRef<T>(Void*)

Mengonversi penunjuk yang tidak dikelola menjadi penunjuk terkelola ke nilai jenis T.

AsRef<T>(T)

Menginterpretasikan ulang referensi baca-saja yang diberikan sebagai referensi yang dapat diubah.

AsRef<T>(Void*)

Sumber:
Unsafe.cs
Sumber:
Unsafe.cs
Sumber:
Unsafe.cs

Penting

API ini bukan kompatibel CLS.

Mengonversi penunjuk yang tidak dikelola menjadi penunjuk terkelola ke nilai jenis 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

Jenis parameter

T

Jenis elemen dari penunjuk terkelola.

Parameter

source
Void*

Penunjuk tidak terkelola untuk dikonversi.

Mengembalikan

T

Pointer terkelola ke nilai jenis T.

Atribut

Keterangan

Pemanggil bertanggung jawab untuk memastikan bahwa penunjuk terkelola yang dihasilkan diselaraskan dengan benar untuk jenis yang direferensikan. Untuk informasi selengkapnya tentang persyaratan penyelarasan, lihat ECMA-335, Detik. I.12.6.2 ("Perataan").

Berlaku untuk

AsRef<T>(T)

Sumber:
Unsafe.cs
Sumber:
Unsafe.cs
Sumber:
Unsafe.cs

Menginterpretasikan ulang referensi baca-saja yang diberikan sebagai referensi yang dapat diubah.

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

Jenis parameter

T

Jenis referensi yang mendasar.

Parameter

source
T

Referensi baca-saja untuk menginterpretasikan ulang.

Mengembalikan

T

Referensi yang dapat diubah ke nilai jenis T.

Keterangan

API ini secara konseptual mirip dengan C++.const_cast<> Pemanggil bertanggung jawab untuk memastikan bahwa tidak ada data yang ditulis ke lokasi yang dirujuk. Runtime berisi logika internal yang diprediksikan pada asumsi bahwa referensi baca-saja benar-benar tidak dapat diubah, dan penelepon yang melanggar invarian ini dapat memicu perilaku yang tidak terdefinisi dalam runtime.

AsRef biasanya digunakan untuk meneruskan referensi baca-saja ke dalam metode seperti Add, yang menerima pointer terkelola yang dapat diubah sebagai argumen. Pertimbangkan contoh berikut.

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

Jika parameter input bukan ref readonly int refToFirstElementref int refToFirstElement, contoh sebelumnya tidak akan dikompilasi, karena referensi baca-saja tidak dapat digunakan sebagai argumen untuk Add. Sebagai gantinya, AsRef dapat digunakan untuk menghapus batasan imutabilitas dan memungkinkan kompilasi berhasil, seperti yang ditunjukkan dalam contoh berikut.

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

Berlaku untuk