Rumah  >  Artikel  >  pembangunan bahagian belakang  >  C# Perwakilan

C# Perwakilan

WBOY
WBOYasal
2024-09-03 15:29:52451semak imbas

Perwakilan C# memainkan peranan penting apabila kami ingin mengendalikan sebarang acara atau panggilan balik dalam kod kami atau kami boleh mengatakan bahawa fungsi mempunyai lebih daripada satu parameter jenis data yang berbeza tetapi kami mahu menghantar fungsi itu sendiri dan bukannya parameter . Dalam kes ini, perwakilan datang dalam gambar kerana ia bertindak seperti penunjuk kepada fungsi, kerana ia adalah jenis data rujukan oleh itu ia memegang rujukan kaedah. Perwakilan adalah sebahagian daripada kelas System.Delegates dalam C#. Ia serupa dengan penuding fungsi dalam pengaturcaraan C dan C++.

Sintaks

Mari kita lihat sintaks pengisytiharan perwakilan dalam C #

<access modifier> delegate < return type > < delegate_name > ( <parameters>)

Penjelasan: Dalam pengubah suai akses sintaks di atas perlu diisytiharkan sebelum mengisytiharkan perwakilan, kerana ia boleh menjadi awam, peribadi atau dilindungi. Sekarang untuk mengisytiharkan perwakilan kita perlu menggunakan kata kunci perwakilan diikuti dengan jenis pemulangan fungsi. Sebagai Contoh,

public delegate void Show ( char ch );

Wakil rancangan yang digunakan di atas digunakan untuk menunjuk pada mana-mana kaedah yang mempunyai parameter dan jenis pulangan yang sama yang dikaitkan dengan fungsi Show () .

Contoh untuk Melaksanakan Perwakilan C#

Di bawah adalah contoh yang dinyatakanL

Contoh #1

Kod untuk menunjukkan kerja perwakilan pelakon tunggal :

Kod:

using System;
class Singlecast_Delegates
{
public delegate void Delete_func() ;
public class SD
{
public static void text_display()
{
Console.WriteLine ( " Hey hello ! , How are you " ) ;
}
public static void text_show()
{
Console.WriteLine ( " Hi ! How is everything ? " ) ;
}
public void print()
{
Console.WriteLine ( " Print " ) ;
}
}
static void Main(string[] args)
{
Delete_func del_var1 = SD.text_show ;
Delete_func del_var2 = new Delete_func ( SD.text_display ) ;
SD obj = new SD() ;
Delete_func del_var3 = obj.print ;
del_var1() ;
del_var2() ;
del_var3() ;
Console.ReadLine () ;
}
}

Output :

C# Perwakilan

Penjelasan: Dalam kod di atas, anda dapat melihat kami telah menetapkan kaedah statik text_show() kelas SD untuk mewakilkan Delete_func() kemudian kami telah menetapkan kaedah statik text_display() kelas SD untuk mewakilkan Delete_func () menggunakan operator baharu. Di samping itu, kita boleh menggunakan kedua-dua cara untuk menetapkan fungsi perwakilan. Oleh itu, pada mulanya, kami telah mencipta contoh kelas SD dan menetapkan kaedah print() kepada perwakilan yang bermaksud perwakilan dengan kelas. Pada akhirnya, kami mencipta objek untuk kelas SD supaya kami boleh memanggil fungsi satu demi satu yang telah kami cipta dalam kod kami.

Contoh #2

Kod untuk menunjukkan kerja perwakilan dua pelakon :

Kod:

using System ;
namespace Educba {
// Here we are declaring the class with name " Edu "
class Edu {
// In this class we will declare the delegates
// Here the return type and parameter type must be same as the return and parameter type
// of the 2 methods
// "number_addition" and "number_substraction" are 2 given delegate names by user
public delegate void number_addition ( int x , int y ) ;
public delegate void number_substraction ( int x , int y ) ;
// here we are declaring the "total" method
public void total ( int x , int y )
{
Console.WriteLine( " (50 + 10) = {0} " , x + y ) ;
}
// here we are declaring the "substraction" method
public void substraction ( int x , int y )
{
Console.WriteLine( " ( 95 - 30 ) = {0} ", x - y ) ;
}
// Main Method declaration
public static void Main(String []args)
{
// creating an object " obj " for "Edu"
Edu obj = new Edu() ;
number_addition delegate1 = new number_addition ( obj.total ) ;
number_substraction delegate2 = new number_substraction( obj.substraction ) ;
// creating an object of the delegate class named as " delegate1 "
// for method "total" and "delegate2" for method "substraction" &
// pass the parameter of the  2 methods by class object "obj"
// by instantiating the delegates
// passing the below values to the methods by declared delegate object
delegate1( 50 , 10) ;
delegate2( 95 , 30);
}
}
}

Output:

C# Perwakilan

Penjelasan: Dalam kod di atas, anda dapat melihat kami menggunakan perwakilan dua pemutus yang berbeza daripada perwakilan pelakon tunggal. Kami telah mengisytiharkan kelas dengan nama Edu dan kelas ini kami telah mengisytiharkan dua perwakilan di mana satu adalah untuk penambahan dua integer manakala satu lagi adalah untuk penolakan 2 integer yang diberikan pada satu masa. Selepas itu, kami telah mengisytiharkan jumlah kaedah untuk menyimpan hasil perwakilan penambahan. Dengan cara yang sama, kami telah mengisytiharkan satu lagi kaedah untuk menyimpan hasil perwakilan penolakan. Dalam kelas utama, kami mencipta objek kelas Edu supaya kami boleh memanggil perwakilan untuk berfungsi untuk melakukan penambahan dan penolakan pada mana-mana dua nombor integer yang diberikan. Kami akan melepasi nilai dan mendapat hasilnya.

Contoh #3

Kod untuk menunjukkan kerja perwakilan tanpa nama:

Kod:

using System;
// declaring delegate method Demo of void type
public delegate void Demo() ;
// creating a class for declaring a static method inside this class.
public class First_Program
{
static int Main()
{
Demo Display = delegate()
{  // displaying the output on the user screen
Console.WriteLine ( " Here is the Anonymous delegate method " ) ;
};
// Here we are calling the display function.
Display() ;
return 0 ;
}
}

Output :

C# Perwakilan

Kesimpulan

setiap kali pengekod perlu menghantar kaedah sebagai hujah kaedah lain maka kita menggunakan perwakilan atau kita boleh mengatakan bahawa perwakilan ialah kelas yang melaluinya kita boleh merangkum tandatangan fungsi. Ia lebih seperti memberi nama kepada parameter kaedah dalam C#.

Atas ialah kandungan terperinci C# Perwakilan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Tegaskan dalam C#Artikel seterusnya:Tegaskan dalam C#