Latest web development tutorials

C # delegasi (Delegate)

C # Principal (Delegasi) mirip dengan C atau C ++ fungsi pointer.Principal (Delegasi) ada metode untuk jenis referensi referensi variabel.Referensi dapat diubah pada saat runtime.

Principal (Delegasi) yang khusus ditujukan untuk acara dan metode callback. Semua delegasi (Delegate) yang berasal dari kelasSystem.Delegate.

Komisi pernyataan (Delegate)

Pernyataan Proxy menentukan metode dapat direferensikan oleh delegasi. Delegasi dapat menunjukkan metode yang memiliki label yang sama.

Misalnya, Anda memiliki sebuah delegasi:

delegasi public int myDelegate (string s);

Komisi di atas dapat digunakan untuk mengacu pada setiap metode yang mengambil parameterstringtunggal dan mengembalikan sebuah variabel bertipeint.

Sintaks untuk menyatakan ditugaskan sebagai berikut:

delegasi <kembali jenis> <delegasi-nama> <daftar parameter>

Contoh komisi (Delegate)

Setelah dinyatakan sebagai jenis delegasi, objek delegasi harus menggunakan kata kuncibaru untuk membuat, dan dengan metode tertentu.Bila Anda membuat parameter delegasi memberikan pernyataanbaru sebagai panggilan metode, seperti menulis, tapi tidak ada argumen.Sebagai contoh:

delegasi public void printString (string s);
...
printString PS1 = printString baru (WriteToScreen);
printString ps2 = printString baru (writeToFile);

Contoh berikut menunjukkan pernyataan komisi, instantiate dan penggunaan, delegasi dapat digunakan untuk referensi metode dengan argumen integer dan mengembalikan nilai integer.

menggunakan System;

mendelegasikan int NumberChanger (int n);
DelegateAppl namespace
{
   kelas TestDelegate
   {
      static int num = 10;
      public static int AddNum (int p)
      {
         num + = p;
         kembali num;
      }

      public static int MultNum (int q)
      {
         num * = q;
         kembali num;
      }
      public int static getNum ()
      {
         kembali num;
      }

      static void Main (string [] args)
      {
         // Buat instance delegasi NumberChanger NC1 = baru NumberChanger (AddNum);
         NumberChanger NC2 = baru NumberChanger (MultNum);
         // Panggil metode menggunakan NC1 delegasi objek (25);
         Console.WriteLine ( "Nilai dari Bil: {0}", getNum ());
         NC2 (5);
         Console.WriteLine ( "Nilai dari Bil: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

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

Nilai Bil: 35
Nilai Bil: 175

Ditugaskan multicast (Multicasting dari Mendelegasikan)

objek delegasi dapat menggunakan operator "+" untuk menggabungkan. Sebuah delegasi menyebutnya menggabungkan menggabungkan dua delegasi. Hanya jenis yang sama kepercayaan dapat dikombinasikan. "-" Operator dapat digunakan untuk menghapus komponen dari delegasi delegasi gabungan.

Gunakan fitur ini berguna ditugaskan, Anda dapat membuat daftar delegasi memanggil metode ketika dipanggil untuk memohon. Ini disebut didelegasikanmulticast (multicasting), juga dikenal sebagai multicasting.Program berikut menunjukkan delegasi multicast:

menggunakan System;

mendelegasikan int NumberChanger (int n);
DelegateAppl namespace
{
   kelas TestDelegate
   {
      static int num = 10;
      public static int AddNum (int p)
      {
         num + = p;
         kembali num;
      }

      public static int MultNum (int q)
      {
         num * = q;
         kembali num;
      }
      public int static getNum ()
      {
         kembali num;
      }

      static void Main (string [] args)
      {
         // Buat delegasi contoh NumberChanger nc;
         NumberChanger NC1 = baru NumberChanger (AddNum);
         NumberChanger NC2 = baru NumberChanger (MultNum);
         nc = NC1;
         nc + = NC2;
         // Panggil nc multicast (5);
         Console.WriteLine ( "Nilai dari Bil: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

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

Nilai Bil: 75

Principal (Delegate) penggunaan

Contoh berikut menunjukkan penggunaan delegasi.printStringpokok digunakan untuk referensi metode dengan string sebagai masukan dan tidak kembali apa-apa.

Kami menggunakan delegasi ini untuk memanggil dua metode, string pertama dicetak ke konsol, dan string kedua untuk mencetak ke file:

menggunakan System;
menggunakan System.IO;

DelegateAppl namespace
{
   kelas PrintString
   {
      FileStream fs statis;
      statis StreamWriter sw;
      // Pernyataan Proxy delegasi public void printString (string s);

      // Metode ini cetakan ke konsol public static void WriteToScreen (string str)
      {
         Console.WriteLine ( "String adalah: {0}", str);
      }
      // Metode ini cetakan untuk mengajukan public static void writeToFile (string s)
      {
         fs = FileStream baru ( "c: \\ message.txt",
         FileMode.Append, FileAccess.Write);
         sw = new StreamWriter (fs);
         sw.WriteLine (s);
         sw.Flush ();
         sw.Close ();
         fs.Close ();
      }
      // Metode ini delegasi sebagai parameter, dan menggunakannya untuk memanggil metode public static void sendString (printString ps)
      {
         ps ( "Hello World");
      }
      static void Main (string [] args)
      {
         printString PS1 = printString baru (WriteToScreen);
         printString ps2 = printString baru (writeToFile);
         sendString (PS1);
         sendString (ps2);
         Console.ReadKey ();
      }
   }
}

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

String adalah: Hello World