当我们想要处理代码中的任何事件或回调,或者我们可以说一个函数具有多个不同数据类型的参数但我们想要传递函数本身而不是参数时,C# 委托发挥着重要作用。在这种情况下,委托出现在图中,因为它的作用就像指向函数的指针,因为它是引用数据类型,因此它保存方法的引用。委托是 C# 中 System.Delegates 类的一部分。它们类似于 C 和 C++ 编程中的函数指针。
让我们看一下 C# 中声明委托的语法
<access modifier> delegate < return type > < delegate_name > ( <parameters>)
说明:在上面的语法中,必须在声明委托之前声明访问修饰符,因为它可以是公共的、私有的或受保护的。现在,为了声明委托,我们必须使用关键字 delegate 后跟函数返回类型。例如,
public delegate void Show ( char ch );
上面使用的 show 委托用于指向与函数 Show () 关联的具有相同参数和返回类型的任何方法。
下面是提到的例子L
演示单演员委托工作的代码:
代码:
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 () ; } }
输出:
说明:在上面的代码中,您可以看到我们将 SD 类的静态方法 text_show() 分配给了委托 Delete_func(),然后我们将 SD 类的静态方法 text_display() 分配给了委托 Delete_func () 使用 new 运算符。另外,我们可以使用这两种方式来分配委托函数。因此,首先,我们创建了一个 SD 类的实例,并将方法 print() 分配给了委托,这意味着带有类的委托。最后,我们为SD类创建了对象,这样我们就可以一一调用我们在代码中创建的函数。
演示双重委托工作的代码:
代码:
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); } } }
输出:
说明:在上面的代码中,您可以看到我们使用的是双强制转换委托,这与单强制转换委托不同。我们已经声明了名为 Edu 的类,并且在这个类中我们声明了两个委托,其中一个用于两个整数的加法,另一个用于一次减去 2 个给定的整数。之后,我们声明了一个方法 Total 来存储加法委托的结果。以同样的方式,我们声明了另一种方法来存储减法委托的结果。在主类中,我们创建 Edu 类的对象,以便我们可以调用委托函数对任意两个给定的整数执行加法和减法。我们将传递该值并获取结果。
演示匿名代表工作的代码:
代码:
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 ; } }
输出:
每当编码器需要传递一个方法作为其他方法的参数时,我们就使用委托,或者我们可以说委托是一个类,通过它我们可以封装函数签名。它更像是为 C# 中的方法参数命名。
以上是C# 代表的详细内容。更多信息请关注PHP中文网其他相关文章!