1、委托是什么
委托是一种数据类型,正如int、string、class等一样,不过这个shuju类型承载的是方法,条件是:这个方法的签名必须和委托在声明时的签名相同,否则不能将这个方法付给这个委托
eg. delegate void calculate(int x,int y)//声明一个委托
如果想把一个方法付给这个委托,对这个方法的要求是:必须有两个int类型的参数,并且无返回值,这样的方法才能被付给这个委托变量
calculate calcul;//声明一个委托变量,就像int i,声明一个int类型的变量一样一样
void add(int x,int y)
{
x+y;
}
以上的这个方法就可以赋给calcul委托变量
2、委托有什么用?
(1)可以把它作为一个参数传给一个方法,比如说,有一个需要计算的方法DoCalculator (),他要进行加减乘除四个运算,在以前的话要,需要用if 条件语句判断
void DoCalculator(int x, int y)
{
if (该运算是加法)
{
进行加法运算
}
if (该运算是减法)
{进行减法运算}
if (该运算是乘法)
{进行乘法运算}
if (该运算是除法)
{进行除法运算}
}
加入以后又增加了复数运算,则还要不厌其烦地写if 。。。else 语句,很是烦人,现在有了委托,一切变得简便起来,我不是把这些具体实现某一功能的方法(即上面的加减乘除四个方法)写进DoCalculator()方法里来,而是传递一个参数给这个委托给这个DoCalculator方法,这个参数就是委托,他的签名和加减乘除四个方法的一样,故他能代表这四个方法执行某一特定的运算,打个比方来说,这个委托就是一个加、减、乘、除这四个方法选出来得一个代表,他为什么能代表他们四个呢,因为他的签名和他们四个的一样。当调用DoCalculator方法时,要传一个参数给他,这个参数就是“加”、“减”“乘”“除”四个中的一个,以执行某一计算
如果以后添加了一个复数的计算,则只需另外定义一个复数相加的方法,然后把这个方法传给DoCalculator这个方法就可以用DoCalculator进行复数运算了
2、他可以在两个对象之间传递信息
比如说有两个窗体,分别为a,b,现在通过点击a窗体,然后在b窗体上显示点击的次数,这是就可以在公共程序立定一个委托,暂且叫她showMessage吧,public delegate void ShowInfoDelegate(string info);
在b窗体根据这个委托的签名定义一个方法,这个方法用于把传进来得参数显示在窗体B上,然后在A窗体定义一个该类型的变量,假如叫count吧,把点击的次数数据保存在count变量里,最后把在B窗体里把定义的显示方法付给这个count变量