Unsafe.AsRef Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Overload
AsRef<T>(Void*) |
Mengonversi penunjuk yang tidak dikelola menjadi penunjuk terkelola ke nilai jenis |
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
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
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 refToFirstElement
ref 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk