Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Memahami Delegasi C#: Panduan Referensi Fungsi dan Event

Delegasi C# mirip dengan pointer ke fungsi dalam C atau C++. Sebuah delegasi adalah variabel tipe referensi yang menyimpan referensi ke suatu metode. Referensi dapat diubah pada waktu eksekusi.

Delegasi terutama digunakan untuk mengimplementasikan event dan metode callback. Semua delegasi secara implisit diturunkan dari kelas System.Delegate.

Mendeklarasikan Delegasi

Deklarasi delegasi menentukan metode mana yang dapat dirujuk oleh delegasi. Sebuah delegasi dapat merujuk ke metode yang memiliki tanda tangan yang sama dengan delegasi tersebut.

Misalnya, pertimbangkan delegasi berikut −

public delegate int MyDelegate(string s);

Delegasi di atas dapat digunakan untuk merujuk ke metode apa pun yang memiliki satu parameter string dan mengembalikan variabel bertipe int.

Sintaks untuk deklarasi delegasi adalah −

delegate <return type> <delegate-name> <parameter list>

Menginstansiasi Delegasi

Setelah tipe delegasi dideklarasikan, objek delegasi harus dibuat dengan kata kunci new dan dikaitkan dengan metode tertentu. Saat membuat delegasi, argumen yang diteruskan ke ekspresi new ditulis mirip dengan panggilan metode, tetapi tanpa argumen metode tersebut. Misalnya −

public delegate void printString(string s); ... printString ps1 = new printString(WriteToScreen); printString ps2 = new printString(WriteToFile);

Contoh berikut menunjukkan deklarasi, instansiasi, dan penggunaan delegasi yang dapat digunakan untuk merujuk ke metode yang menerima parameter integer dan mengembalikan nilai integer.

Live Demo
using System; delegate int NumberChanger(int n); namespace DelegateAppl { class TestDelegate { static int num = 10; public static int AddNum(int p) { num += p; return num; } public static int MultNum(int q) { num *= q; return num; } public static int getNum() { return num; } static void Main(string[] args) { //create delegate instances NumberChanger nc1 = new NumberChanger(AddNum); NumberChanger nc2 = new NumberChanger(MultNum); //calling the methods using the delegate objects nc1(25); Console.WriteLine("Value of Num: {0}", getNum()); nc2(5); Console.WriteLine("Value of Num: {0}", getNum()); Console.ReadKey(); } } }

Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −

Value of Num: 35 Value of Num: 175

Multicasting Delegasi

Objek delegasi dapat digabungkan menggunakan operator "+". Delegasi yang digabung memanggil kedua delegasi yang digunakan untuk menggunakannya. Hanya delegasi dengan tipe yang sama yang dapat digabungkan. Operator "-" dapat digunakan untuk menghapus komponen delegasi dari delegasi yang digabungkan.

Dengan properti delegasi ini, Anda dapat membuat daftar pemanggilan metode yang akan dipanggil ketika delegasi dipanggil. Ini disebut multicasting delegasi. Program berikut menunjukkan multicasting delegasi −

Live Demo
using System; delegate int NumberChanger(int n); namespace DelegateAppl { class TestDelegate { static int num = 10; public static int AddNum(int p) { num += p; return num; } public static int MultNum(int q) { num *= q; return num; } public static int getNum() { return num; } static void Main(string[] args) { //create delegate instances NumberChanger nc; NumberChanger nc1 = new NumberChanger(AddNum); NumberChanger nc2 = new NumberChanger(MultNum); nc = nc1; nc += nc2; //calling multicast nc(5); Console.WriteLine("Value of Num: {0}", getNum()); Console.ReadKey(); } } }

Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −

Value of Num: 75

Menggunakan Delegasi

Contoh berikut menunjukkan penggunaan delegasi. Delegasi printString dapat digunakan untuk merujuk ke metode yang menerima string sebagai masukan dan tidak mengembalikan apa pun.

Kami menggunakan delegasi ini untuk memanggil dua metode, yang pertama mencetak string ke konsol, dan yang kedua mencetaknya ke file −

Live Demo
using System; using System.IO; namespace DelegateAppl { class PrintString { static FileStream fs; static StreamWriter sw; // delegate declaration public delegate void printString(string s); // this method prints to the console public static void WriteToScreen(string str) { Console.WriteLine("The String is: {0}", str); } //this method prints to a file public static void WriteToFile(string s) { fs = new FileStream("c:\\message.txt", FileMode.Append, FileAccess.Write); sw = new StreamWriter(fs); sw.WriteLine(s); sw.Flush(); sw.Close(); fs.Close(); } // this method takes the delegate as parameter and uses it to // call the methods as required public static void sendString(printString ps) { ps("Hello World"); } static void Main(string[] args) { printString ps1 = new printString(WriteToScreen); printString ps2 = new printString(WriteToFile); sendString(ps1); sendString(ps2); Console.ReadKey(); } } }

Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −

The String is: Hello World

Bahasa C

  1. C# Hello World – Membangun Aplikasi C# Pertama Anda
  2. Memahami Kata Kunci dan Pengidentifikasi C#: Aturan, Daftar, dan Praktik Terbaik
  3. Menguasai Variabel dan Tipe Data Primitif C#: Panduan Lengkap
  4. Operator C# – Panduan Lengkap tentang Operator dalam C#
  5. Empat Pola Terbukti untuk Fungsi yang Dibuat Pengguna dalam C
  6. Cara Meneruskan Array 1D dan 2D ke Fungsi dalam C – Panduan Praktis
  7. AI Menjadi Sorotan di Economist Innovation Summit – Pemimpin Minta Meningkatkan, Tidak Menggantikan, Keterampilan Manusia
  8. Variabel dan Tipe Data C++: Panduan Ahli untuk int, double, char, string, bool
  9. Menguasai Fungsi C: Struktur, Deklarasi, dan Praktik Terbaik
  10. Penggunaan Memori Efisien dengan Bit Field C