浅谈委托和事件之初识C#委托
2011-07-07 16:52
281 查看
园子里有很多讲委托的文章,都很好。我写这篇文章的目的。一、是为了巩固基础知识。二、让更多的人理解委托、使用委托。说的都比较肤浅,希望大家多批评。
1、MSDN:委托是一种定义方法签名的类型。当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。您可以通过委托实例调用方法。
2、委托是一种可以把引用存储为函数的类型。
3、委托是一种类型安全的函数回调机制。
大家不要被概念震住。对于概念的理解都是建立在对其内容充分理解基础上的。看问题的角度不同,总结出来的概念自然也不尽相同,不过殊涂同归,都是在说委托这个语法。下面我们通过Demo来慢慢理解这个C#中令人惊叹的委托机制。
看如下代码:
1、创建委托签名,该签名除了多一个delegate关键字以外,其它部分和没有函数体的函数完全一样。
2、创建你要引用方法。例子中的Add、Minus、Mult、Devide等方法,方法签名要和委托一样。
3、实例化委托传入要执行的函数后,用委托的实例调用方法。比如
一、委托的概念
委托的定义有很多,我始终感觉概念这东西是“仁者见仁智者见智”的东西,大家看哪个好理解就理解哪个好了。常见的委托的定义有如下几种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)方法。
相关文章推荐
- 浅谈C#委托和事件
- 浅谈我对委托与事件的理解
- 初识c#---委托,事件和观察者模式(Observer)设计模式
- 浅谈委托和事件之C#的事件模型
- C#委托-在窗体中使用委托和事件
- 【转】浅谈C#委托和事件
- 浅谈JavaScript事件机制与事件委托
- 浅谈委托、委托与事件、委托进化成lambda表达式和Linq
- C#委托-委托和事件(来自张子阳)
- 浅谈C#的委托和事件
- 浅谈JavaScript的事件(事件委托)
- 浅谈c#中的委托和事件
- NET中级课--浅谈委托,事件,异步调用,回调等概念
- 浅谈委托和事件之委托的声明方式
- 浅谈委托和事件(一)
- 浅谈委托和事件之委托链
- 浅谈C# 中的委托和事件
- C#委托及事件委托的初步理解(经典文章)
- 浅谈jQuery代码优化之事件委托(事件绑定)——bind()|live()|delegate()|on()|off()|one()方法
- C#事件浅谈(需知委托)