您的位置:首页 > 其它

什么是多播委托?

2015-07-06 14:51 746 查看
说明:1、多播委托就是对一个声明的委托Mydelegate进行多个同类型的方法的赋值;
    2、用委托将这些方法进行,依次的调用;

   3、可以对这些方法进行委托的添加 比如:mdl+=T1;

   4、可以对这些方法进行委托的移除 比如:mdl-=T1;

   5、委托用之前还要判断是否为空;(很重要!)

1、使用委托的两种写法:

第一种写法:

MyDel mdl = new MyDel(T1);

第二种写法:

MyDel mdl = T1;//第二种写法,其实方法是一样的,反编译工具看,=后边也是被new 出来的


2、当然还可以进行添加,和,移除方法

mdl += T2; //可以添加

mdl += T3;

mdl -=T2; //可以移除

3、委托用之前,需要判断是否为null,

if (mdl!=null)//4、委托用之前,需要判断是否为null,这个很重要的!!

{

mdl();

}


附:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace 多播委托

{

//2、定义委托

public delegate void MyDel();

class Program
{
static void Main(string[] args)
{
//3、第一种写法:

// MyDel mdl = new MyDel(T1);

MyDel mdl = T1;//第二种写法,其实方法是一样的,反编译工具看,=后边也是被new 出来的

mdl += T2;  //可以添加

mdl += T3;

mdl -=T2;   //可以移除

if (mdl!=null)//4、委托用之前,需要判断是否为null,这个很重要的!!
{
mdl();
}
Console.ReadKey();
}

//1、先定义三个方法  T1、T2、T3

public static void T1()
{
Console.WriteLine("第一个方法");
}
public static void T2()
{
Console.WriteLine("第二个方法");
}
public static void T3()
{
Console.WriteLine("第三个方法");
}
}
}


多播委托链

1、问题:多播委托如何处理返回值?

回答:多播委托会只将最后一个委托方法的结果输出来;

2、验证:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace 多播委托链
{
//2、定义委托
public delegate int Mydel();
class Program
{
static void Main(string[] args)

{//调用
Mydel mdl = D1;

mdl += D2;

mdl += D3;

if (mdl!=null)
{
mdl();
}
Console.WriteLine(mdl());//可以看到这里只是打印出来了第三个方法的结果
Console.ReadKey();
}

//1、先定义三个有返回值的方法

public static int D1()
{
return 1;
}
public static int D2()
{
return 2;
}
public static int D3()
{
return 3;
}
}
}

F11逐步调试,mdl是先被赋值上方法T1、T2、T3、,最后又按顺序再调用了方法,T3方法是最后执行的。


总结:

1、委托绑定多个方法后,其中一个方法执行发生异常后面的方法还会继续执行吗?不会!

2、一个重要的方法GetInvocationList();//返回一个Delegate[]类型。Delegate类是一个抽象类,是所有委托的父类。



3、组合的委托必须是同一个类型




4、相当于创建了一个按照组合的顺序依次调用的新委托对象。

5、委托的组合一般是给事件用的,用普通的委托的时候很少用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: