tidak aman (Referensi C#)

Kata unsafe kunci menunjukkan konteks yang tidak aman, yang diperlukan untuk setiap operasi yang melibatkan penunjuk. Untuk informasi selengkapnya, lihat Kode dan Penunjuk tidak aman.

Referensi bahasa C# mendokumentasikan versi bahasa C# yang paling baru dirilis. Ini juga berisi dokumentasi awal untuk fitur dalam pratinjau publik untuk rilis bahasa yang akan datang.

Dokumentasi mengidentifikasi fitur apa pun yang pertama kali diperkenalkan dalam tiga versi terakhir bahasa atau dalam pratinjau publik saat ini.

Petunjuk / Saran

Untuk menemukan kapan fitur pertama kali diperkenalkan di C#, lihat artikel tentang riwayat versi bahasa C#.

Gunakan pengubah unsafe dalam deklarasi jenis atau anggota. Seluruh tingkat tekstual jenis atau anggota adalah konteks yang tidak aman. Misalnya, metode berikut dinyatakan dengan pengubah unsafe :

unsafe static void FastCopy(byte[] src, byte[] dst, int count)
{
    // Unsafe context: can use pointers here.
}

Cakupan konteks yang tidak aman diperluas dari daftar parameter ke akhir metode, sehingga Anda juga dapat menggunakan pointer dalam daftar parameter:

unsafe static void FastCopy ( byte* ps, byte* pd, int count ) {...}

Anda juga dapat menggunakan blok yang tidak aman untuk mengaktifkan penggunaan kode yang tidak aman di dalam blok ini. Contohnya:

unsafe
{
    // Unsafe context: can use pointers here.
}

Untuk mengkompilasi kode yang tidak aman, Anda harus menentukan opsi pengkompilasi AllowUnsafeBlocks . Runtime bahasa umum tidak dapat memverifikasi kode yang tidak aman.

Note

Fitur pratinjau keamanan memori yang tersedia di C# 15 mempersempit operasi yang memerlukan unsafe konteks. Konteks unsafe tidak lagi diperlukan untuk membuat penunjuk, fixed pernyataan, mengonversi stackalloc ekspresi ke penunjuk, dan menggunakan sizeof pada jenis yang tidak dikelola. Hanya operasi yang mengakses memori yang ditujukan ke, seperti tidak langsung penunjuk, yang masih memerlukan unsafe konteks. Pratinjau yang sama juga menambahkan unsafe(expression) formulir yang menetapkan konteks tidak aman untuk satu ekspresi, untuk posisi di mana unsafe blok tidak dapat muncul, seperti penginisialisasi bidang atau catch filter. Untuk informasi selengkapnya, lihat Ekspresi tidak aman. Pratinjau juga memberi unsafe modifier pada anggota arti baru: pengkompilasi mengenalinya sebagai menandai anggota memerlukan tidak aman. Penegakan penelepon atas kewajiban tersebut belum diterapkan, jadi menandai anggota unsafe saat ini tidak berpengaruh pada pemanggilnya. Untuk informasi selengkapnya, lihat Anggota penelepon yang tidak aman.

Contoh

// compile with: -unsafe
class UnsafeTest
{
    // Unsafe method: takes pointer to int.
    unsafe static void SquarePtrParam(int* p)
    {
        *p *= *p;
    }

    unsafe static void Main()
    {
        int i = 5;
        // Unsafe method: uses address-of operator (&).
        SquarePtrParam(&i);
        Console.WriteLine(i);
    }
}
// Output: 25

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat Kode tidak aman di Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.

Lihat juga