您的位置:首页 > 编程语言 > C#

浅谈委托和事件之初识C#委托

2011-07-07 16:52 281 查看
园子里有很多讲委托的文章,都很好。我写这篇文章的目的。一、是为了巩固基础知识。二、让更多的人理解委托、使用委托。说的都比较肤浅,希望大家多批评。

一、委托的概念

委托的定义有很多,我始终感觉概念这东西是“仁者见仁智者见智”的东西,大家看哪个好理解就理解哪个好了。常见的委托的定义有如下几种

1、MSDN:委托是一种定义方法签名的类型。当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。您可以通过委托实例调用方法。

2、委托是一种可以把引用存储为函数的类型。

3、委托是一种类型安全的函数回调机制。

大家不要被概念震住。对于概念的理解都是建立在对其内容充分理解基础上的。看问题的角度不同,总结出来的概念自然也不尽相同,不过殊涂同归,都是在说委托这个语法。下面我们通过Demo来慢慢理解这个C#中令人惊叹的委托机制。

看如下代码:

classProgram


{


publicdelegateintCalculateDelegate(intx,inty);






staticvoidMain(string[]args)


{


CalculateDelegateadd=newCalculateDelegate(Program.Add);


intresultAdd=add(2,2);




CalculateDelegateminus=newCalculateDelegate(Program.Minus);


intresultMinus=minus(2,2);




CalculateDelegatemult=newCalculateDelegate(Program.Mult);


intresultMult=mult(2,2);




CalculateDelegatedevide=newCalculateDelegate(Program.Devide);


intresultDevide=devide(2,2);




Console.WriteLine(resultAdd);


Console.WriteLine(resultMinus);


Console.WriteLine(resultMult);


Console.WriteLine(resultDevide);


Console.ReadKey();


}




publicstaticintAdd(intx,inty)


{


returnx+y;


}


publicstaticintMinus(intx,inty)


{


returnx-y;


}


publicstaticintMult(intx,inty)


{


returnx*y;


}


publicstaticintDevide(intx,inty)


{


returny==0?0:x/y;


}


}


二、代码解释:

程序很简单,首先定义一个用于计算的委托签名,然后在实现四个加、减、乘、除四个方法,最后在Main函数中分别创建委托实例传入方法名,并调用。现在大家是否对如何使用委托有了直观的了解。我总结一下:

1、创建委托签名,该签名除了多一个delegate关键字以外,其它部分和没有函数体的函数完全一样。

2、创建你要引用方法。例子中的Add、Minus、Mult、Devide等方法,方法签名要和委托一样。

3、实例化委托传入要执行的函数后,用委托的实例调用方法。比如

CalculateDelegateadd=newCalculateDelegate(Program.Add);intresultAdd=add(2,2);


其中Program.Add是实例化委托传入的函数,然后用委托的实例add调用方法Add。有点绕,大家们可以把add理解成一个指针,add(2,2)指向的就是Program.Add(2,2)方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: