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

C# - Delegasi

Delegasi C# mirip dengan pointer ke fungsi, dalam C atau C++. Seorang delegasi adalah variabel tipe referensi yang menyimpan referensi ke metode. Referensi dapat diubah saat runtime.

Delegasi terutama digunakan untuk mengimplementasikan acara dan metode panggilan balik. Semua delegasi secara implisit berasal dari System.Delegate kelas.

Mendeklarasikan Delegasi

Deklarasi delegasi menentukan metode yang dapat direferensikan oleh delegasi. Delegasi dapat merujuk ke metode, yang memiliki tanda tangan yang sama dengan delegasi.

Misalnya, pertimbangkan delegasi

public delegate int MyDelegate (string s);

Delegasi sebelumnya dapat digunakan untuk mereferensikan metode apa pun yang memiliki satu string parameter dan mengembalikan int jenis variabel.

Sintaks untuk deklarasi delegasi adalah

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

Menginisiasi Delegasi

Setelah tipe delegasi dideklarasikan, objek delegasi harus dibuat dengan baru kata kunci dan dikaitkan dengan metode tertentu. Saat membuat delegasi, argumen diteruskan ke baru ekspresi ditulis mirip dengan pemanggilan metode, tetapi tanpa argumen ke metode. Misalnya

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

Contoh berikut menunjukkan deklarasi, instantiasi, dan penggunaan delegasi yang dapat digunakan untuk referensi metode yang mengambil parameter integer dan mengembalikan nilai integer.

Demo Langsung
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, menghasilkan hasil sebagai berikut

Value of Num: 35
Value of Num: 175

Multicasting Delegasi

Objek delegasi dapat disusun menggunakan operator "+". Delegasi yang terdiri dari panggilan dua delegasi itu terdiri dari. Hanya delegasi dari jenis yang sama yang dapat dikomposisikan. Operator "-" dapat digunakan untuk menghapus delegasi komponen dari delegasi yang dibuat.

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

Demo Langsung
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, menghasilkan hasil sebagai berikut

Value of Num: 75

Menggunakan Delegasi

Contoh berikut menunjukkan penggunaan delegasi. Delegasi printString dapat digunakan untuk referensi metode yang mengambil string sebagai input 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 −

Demo Langsung
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, menghasilkan hasil sebagai berikut

The String is: Hello World

Bahasa C

  1. C# Hello World - Program C# Pertama Anda
  2. C# Kata Kunci dan Pengidentifikasi
  3. Variabel C# dan Tipe Data (Primitif)
  4. C# Operator
  5. Jenis Fungsi yang Ditentukan Pengguna dalam Pemrograman C
  6. Lewati array ke fungsi di C
  7. Pertarungan tangan kosong di antara kejutan di Economist Innovation Summit, saat para delegasi didesak untuk meningkatkan bukan menggantikan keterampilan manusia
  8. Variabel dan Tipe C++:int, double, char, string, bool
  9. C - Fungsi
  10. C - Bidang Bit