C#委托-多播委托调用多个方法

我们可不可以将两个以上的方法委托给一个对象呢?当然可以。多播委托就是指引用多个方法委托,它也是一个委托,当调用委托时,它连续调用每个方法,只要这些方法的签名与委托的定义相同。 为了把委托的单个实例合并为一个多播委托,委托必须是同类型的,返回类型必须是void,不能带输出参数(但可以带引用参数),如果委托是有返回值的函数,则只能调用最后一个委托函数。 当调用多播委托里,委托所表示的每个方法依次调用。如果有任何参数,它们将用于所有的方法。 多播委托: 1.委托声明包含的方法返回值必须为void,否则会抛出run-time exception。 2.使用“+”、“+=”添加方法,“-”、“-=”删除方法。 3.声明和实例化都和其他委托没有什么不同。 多播委托的示例程序: using System; using System.Collections.Generic; using System.Text; namespace ConsoleApp1 { //声明一个委托 public delegate void msg(); //编写一个类 class messges { //messges类下的一个成员方法m1 public static void m1() { Console.WriteLine("方法一被huashanlin调用"); } //messges类下的一个成员方法m2 public static void m2() { Console.WriteLine("方法二被huashanlin调用"); } //messges类下的一个成员方法m3 public static void m3() { Console.WriteLine("方法三被huashanlin调用"); } } //另一个类 class Program { //该类下包含的主函数 static void Main(string[] args) { //实例化一个委托,并封装messges类中的一个方法m2 msg ms = new msg(messges.m2); //在原有的封装了一个m1方法的委托实例中再封装进一个新 的方法m1 ms = ms + messges.m1; //或者上面的语句可以写成ms += messges.m1;两者的效果 是一样的 //以下为该委托实例封装第三个方法 ms += messges.m3; //调用该委托实例,那么由于多播委托之后调用该委托就要 执行完此封装进去的三个方法 ms(); } } } //注:deletge保存的方法签名是以hash队列的形式存在的 多播委托示例程序二: delegate void Delegate_Multicast(int x, int y); Class Class2 { static void Method1(int x, int y) { Console.WriteLine("You r in Method 1"); } static void Method2(int x, int y) { Console.WriteLine("You r in Method 2"); } public static void Main() { Delegate_Multicast func = new Delegate_Multicast(Method1); func += new Delegate_Multicast(Method2); func(1, 2); // Method1 and Method2 are called func -= new Delegate_Multicast(Method1); func(2, 3); // Only Method2 is called } }解析: 上面的示例程序分别定义了名为method1 和 method2的两个接受整型参数、返回类型为void的方法。 在Main函数里使用下面的声明创建委托对象: Delegate_Multicast func = new Delegate_Multicast(Method1); 然后使用+= 来添加委托,使用-=来移除委托。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值