理解委托(delegate)及为什么要使用委托

理解委托(delegate)及为什么要使用委托

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

上述为官方说法,理解起来比较难,举个生活中的例子:

某人有三子,让他们各自带一样东西出门,并带回一头猎物。
上面一句话可以理解为父亲对儿子的委托:猎物 办法(工具 某工具)-->delegate 猎物(返回值) 带回猎物(委托名)(工具(参数类型) x)-->delegate int GetValue(int i)
三个人执行委托的方法各不相同
兔子 打猎(工具 弓)-public static int GetValue1(int i){ return i; }
野鸡 买(工具 钱)-public static int GetValue2(int i){ return i*2; }
狼 诱捕(工具 陷阱)-public static int GetValue3(int i){ return i*i; }

如何调用委托

用new关键字(将方法名作为参数)生成一个委托对象,建立委托与方法的关联。

GetValue obj = new GetVlaue(Class.GetValue1);

obj(3); --> result: 3

GetValue obj = new GetVlaue(Class.GetValue2);

obj(3); --> result: 6

GetValue obj = new GetVlaue(Class.GetValue3)

obj(3); --> result: 9

通过委托调用不同的方法,将需要执行的方法作为委托的参数

我们还可以实现多路广播委托,什么是多路广播委托,看例子:

GetValue obj = new GetVlaue(Class.GetValue1);

obj += new GetVlaue(Class.GetValue2);

obj += new GetVlaue(Class.GetValue3);

obj(3);

多路广播委托即:一处调用委托,所有关联方法都会被调用。

委托的好处

1.相当于用方法作为另一方法参数(类似于C的函数指针)
2.在两个不能直接调用的方法中作为桥梁,如:在多线程中的跨线程的方法调用就得用委托
3.当不知道方法具体实现什么时使用委托,如:事件中使用委托

附:.net framework中对委托进行了封装,直接使用Func<>来代替delegate,Func<>最多有四个参数的重载。

时间: 2024-10-15 06:34:50

理解委托(delegate)及为什么要使用委托的相关文章

c# 委托 delegate

委托是一种存储函数引用的类型,在事件和事件的处理时有重要的用途 通俗的说,委托是一个可以引用方法的类型,当创建一个委托,也就创建一个引用方法的变量,进而就可以调用那个方法,即委托可以调用它所指的方法. 使用委托 委托的使用需要以下步骤: 定义委托 delegate double ParocessDelegate(double param1,double param2); 委托的定义非常类似于函数,但不带函数体,且要使用delegate关键字.委托定义需要指明委托名称以及一个返回类型和一个参数列表

关于C# 委托(delegate)与事件(event)的用法及事例

C#中的委托和事件对于新手可能会有一点难理解,所以先从一个小例子入手,以便能更好的理解其如何使用.有一个学生每天定闹钟在早上6点起床,所以当每天早上6点的时候,闹钟就会响起来,从而学生才会按时起床. 上面例子实际上包括2个类,一个是学生类(Student),一个是闹钟类(Ring).此时,让我们仔细想想,当闹钟到点后如何通知学生呢?当然不要说,闹钟响了,学生能听到这样的话23333,现在是写程序,一切用程序说话.也就是说当时间到了,闹钟类里应该有个给学生发消息的方法(OnSendMessage(

【温故知新】C#委托delegate

在c#的学习过程中,学到委托与事件总会迷糊一段时间,迷糊过后自然而就似懂非懂了~,所以最近我打算把以前所学的迷糊过的知识总结,温故知新,总结记录下来. 首先,我们来看一下msdn对委托的定义: delegate 关键字用于声明可用来封装命名方法的引用类型.委托大致类似于 C++ 中的函数指针:但是,委托是类型安全和可靠的. delegate 可让您传递一个函数作为参数.委托的类型安全要求作为 delegate 传递的函数具有与 delegate 声明相同的签名. 委托是事件的基础. 我们都知道,

委托Delegate,多播委托和委托链

定义一个委托 public delegate void CalculateDelegate(int 32 x,int 32 y); 定义一个委托类型的变量 public static CalculateDelegate mydelegate; 定义一个方法和委托绑定,注意定义的方法和委托的参数要统一 public static void Add(int 32 x,int 32 y) { console.writeline(x+y); } 将方法和委托绑定 public static void m

组件接口(API)设计指南[3]-委托(delegate)和数据源协议(data-source protocols)

*返回目录阅读其他章节: http://blog.csdn.net/cuibo1123/article/details/39894477 委托(delegate)和数据源协议(data-source protocols) 委托协议是一个非常好的设计,它能让你用简单灵活的方式去实现MVC模式,并能增强松散耦合以及养成良好的API设计习惯. 这里是MGTileMenu的委托协议. 我们几乎可以在任何组件中利用经典的委托(delegate)和数据源协议(data-source protocols).如

【C#】委托-Delegate

C# 委托(Delegate) C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变. 委托(Delegate)特别用于实现事件和回调方法.所有的委托(Delegate)都派生自 System.Delegate 类. 声明委托(Delegate) 委托声明决定了可由该委托引用的方法.委托可指向一个与其具有相同标签的方法. 例如,假设有一个委托: public delegate int My

C#用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程

C#用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程C# 2011-03-05 13:06:24 阅读19 评论0   字号:大中小 订阅 用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程 在C#中使用线程的方法很多,使用委托的BeginInvoke和EndInvoke方法就是其中之一. BeginInvoke方法可以使用线程异步地执行委托所指向的方法.然后通过EndInvoke方法获得方法的返回值(EndInvoke方法的返回

C#_委托Delegate

委托 C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变. 委托(Delegate)特别用于实现事件和回调方法.所有的委托(Delegate)都派生自 System.Delegate 类. 声明委托(Delegate) 委托声明决定了可由该委托引用的方法.委托可指向一个与其具有相同标签的方法.   1 delegate 函数返回类型 委托名 (<方法参数列表>); 实例化委托(Dele

委托 delegate

c# 的委托就是说把函数当参数来传递. 这个在js完全就用不着搞什么委托东西,直接转就是了嘛.对不对!怎么录嘛! 一个函数,如果它的参数是函数,那么是这样子写的 public void method(Action<string, Int32> voidMethod, Func<string, Int32> returnMethod) Action<string, Int32> voidMethod 的意思是说这个将被传进来的函数是一个没有return的函数,就是publ