Latest web development tutorials

C # kode yang tidak aman

Ketika sebuah blok kode menggunakan tag pengubahtidak aman, C # memungkinkan penggunaan variabel pointer dalam fungsi.kode yang tidak aman atau kode unmanaged adalah penggunaan variabel blok kodepointer.

variabel pointer

Sebuah pointer adalah variabel nilai alamat variabel lain, yaitu, alamat langsung dari lokasi memori.Seperti variabel lain atau konstanta, Anda harus menggunakan pointer sebelum variabel penyimpanan alamat pointer deklarasi lainnya.

Bentuk umum dari variabel pointer deklarasi adalah:

Jenis * var-nama;

Berikut ini adalah deklarasi pointer yang valid:

int * ip; / * poin ke integer * /
ganda * dp; / * pointer ke nomor presisi ganda * /
mengapung * fp; / * pointer ke float * /
char * ch / * pointer ke char * /

Contoh berikut menggambarkan penggunaan C # menggunakan pengubahtidak aman ketika pointer:

menggunakan System;
namespace UnsafeCodeApplication
{
    Program kelas
    {
        statis tidak aman void Main (string [] args)
        {
            int var = 20;
            int * p = & var;
            Console.WriteLine ( "Data adalah: {0}", var);
            Console.WriteLine ( "Alamat adalah: {0}", (int) p);
            Console.ReadKey ();
        }
    }
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Data adalah: 20
Alamat adalah: 99215364

Anda tidak dapat mendeklarasikan seluruh metode sebagai kode yang tidak aman, hanya bagian dari kebutuhan untuk menyatakan metode sebagai kode yang tidak aman. Contoh berikut menggambarkan hal ini.

Mengambil nilai data menggunakan pointer

Anda dapat menggunakanToString () metode data posisi referensi disimpan dalam variabel pointer pengambilan.Contoh berikut menggambarkan hal ini:

menggunakan System;
namespace UnsafeCodeApplication
{
   Program kelas
   {
      public void static Main ()
      {
         tidak aman
         {
            int var = 20;
            int * p = & var;
            Console.WriteLine ( "Data adalah: {0}", var);
            Console.WriteLine ( "Data adalah: {0}", p-> ToString ());
            Console.WriteLine ( "Alamat adalah: {0}", (int) p);
         }
         Console.ReadKey ();
      }
   }
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Data adalah: 20
Data adalah: 20
Alamat adalah: 77128984

Melewati pointer sebagai parameter metode

Anda dapat melewati variabel pointer sebagai parameter untuk metode pendekatan. Contoh berikut menggambarkan hal ini:

menggunakan System;
namespace UnsafeCodeApplication
{
   kelas TestPointer
   {
      publik tidak aman kekosongan swap (int * p, int q *)
      {
         int temp = * p;
         * P = * q;
         * Q = suhu;
      }

      public aman static void Main ()
      {
         TestPointer p = baru TestPointer ();
         int var1 = 10;
         int var2 = 20;
         int * x = & var1;
         int * y = & var2;
         
         Console.WriteLine ( "Sebelum Swap: var1: {0}, var2: {1}", var1, var2);
         p.swap (x, y);

         Console.WriteLine ( "Setelah Swap: var1: {0}, var2: {1}", var1, var2);
         Console.ReadKey ();
      }
   }
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Sebelum Swap: var1: 10, var2: 20
Setelah Swap: var1: 20, var2: 10

Menggunakan pointer untuk mengakses elemen array

Dalam C #, nama array dan pointer ke data array dengan tipe data yang sama adalah pointer ke jenis variabel yang berbeda. Misalnya, int * p dan int [] p adalah jenis yang berbeda. Anda dapat meningkatkan variabel pointer p, karena tidak tetap dalam memori, tetapi alamat dari array adalah tetap dalam memori, sehingga Anda tidak dapat menambahkan array p.

Jadi, jika Anda perlu menggunakan variabel pointer untuk mengakses data array, seperti yang biasanya kita lakukan di C atau C ++ sebagai kata kunci untuk menggunakan pointer tetaptetap.

Contoh berikut menggambarkan hal ini:

menggunakan System;
namespace UnsafeCodeApplication
{
   kelas TestPointer
   {
      public aman static void Main ()
      {
         int [] daftar = {10, 100, 200};
         tetap (int * ptr = daftar)

         / * Tampilan pointer alamat array yang * /
         for (int i = 0; i <3; i ++)
         {
            Console.WriteLine ( "Alamat daftar [{0}] = {1}", i, (int) (ptr + i));
            Console.WriteLine ( "Nilai dari daftar [{0}] = {1}", i, * (ptr + i));
         }
         Console.ReadKey ();
      }
   }
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Alamat daftar [0] = 31627168
Nilai daftar [0] = 10
Alamat daftar [1] = 31627172
Nilai dari daftar [1] = 100
Alamat daftar [2] = 31627176
Nilai dari daftar [2] = 200

Mengkompilasi kode yang tidak aman

Dalam rangka untuk mengkompilasi kode yang tidak aman, Anda harus beralih ke baris perintah kompiler menentukan/ tidak aman baris perintah.

Misalnya, untuk mengkompilasi sebuah program yang disebut prog1.cs berisi kode yang tidak aman, masukkan perintah di baris perintah:

csc / prog1.cs tidak aman

Jika Anda menggunakan Visual Studio IDE, Anda harus mengaktifkan kode tidak aman di proyek properti.

Lanjutkan sebagai berikut:

  • Dengan simpul mengklik dua kali Explorer (Solution Explorer) atribut (properti), bukaproperti proyek (proyek properti).
  • Klik tabBuild.
  • Pilih opsi"Allow kode yang tidak aman".