当前位置: 首页 > 后端技术 > Java

C#委托(Delegate)

时间:2023-04-02 00:28:24 Java

C#委托(Delegate)C#中的委托(Delegate)类似于C或C++中的函数指针。委托是一个引用类型变量,它包含对方法的引用。引用可以在运行时更改。委托专门用于实现事件和回调方法。所有委托(Delegate)都派生自System.Delegate类。声明委托(Delegate)委托声明决定了委托可以引用的方法。委托可以指向与它具有相同标签的方法。例如,假设有一个委托:publicdelegateintMyDelegate(strings);上述委托可用于引用任何采用单个字符串参数并返回int类型变量的方法。声明委托的语法如下:delegateInstantiateadelegate(Delegate)一旦声明了委托类型,就必须使用new关键字创建委托对象并关联用特定的方法。创建委托时,传递给new语句的参数就像方法调用一样编写,但没有参数。例如:publicdelegatevoidprintString(strings);...printStringps1=newprintString(WriteToScreen);printStringps2=newprintString(WriteToFile);下面的示例演示了委托的声明、实例化和使用,它可用于引用一种采用一个整数参数并返回一个整数值的方法。使用System;delegateintNumberChanger(intn);namespaceDelegateAppl{classTestDelegate{staticintnum=10;的例子publicstaticintAddNum(intp){num+=p;返回数;}publicstaticintMultNum(intq){num*=q;返回数;}publicstaticintgetNum(){返回数字;}staticvoidMain(string[]args){//创建委托实例NumberChangernc1=newNumberChanger(AddNum);NumberChangernc2=newNumberChanger(MultNum);//使用委托对象调用方法nc1(25);Console.WriteLine("Num的值:{0}",getNum());NC2(5);Console.WriteLine("Num的值:{0}",getNum());控制台.ReadKey();}}}当上面的代码被编译和执行时,会产生如下结果:ValueofNum:35ValueofNum:175委托多播(MulticastingofaDelegate)委托对象可以使用“+”运算符组合。合并委托调用它合并的两个委托。只能合并相同类型的委托。“-”运算符可用于从合并委托中删除组件委托。使用委托的这一有用特性,您可以创建一个方法调用列表,以便在调用委托时调用。这称为委托多播或多播。以下程序演示了委托多播:示例使用System;delegateintNumberChanger(intn);namespaceDelegateAppl{classTestDelegate{staticintnum=10;publicstaticintAddNum(intp){num+=p;返回数;}publicstaticintMultNum(intq){num*=q;返回数;}publicstaticintgetNum(){返回数字;}staticvoidMain(string[]args){//创建委托实例NumberChangernc;NumberChangernc1=newNumberChanger(AddNum);NumberChangernc2=newNumberChanger(MultNum);nc=nc1;nc+=nc2;//调用多播nc(5);Console.WriteLine("Num的值:{0}",getNum());控制台.ReadKey();}}}当上面的代码被编译和执行时,它产生如下结果:ValueofNum:75