如果你足够强大,你就不会把幸福押在别人身上,你会自己创造幸福或者给别人带来幸福。而变得强大的途径就是学习,就是读书,学一切东西,读任何想读的书。 爱你让我变得更强。。 继续读一些专业文章了。不保证都是原创,但是保证每篇技术文章的质量。也会注明来源,标准就是浅显易懂。但不简单。
原文来自:贺臣感谢原作者的好文章。 1.什么是委托,为什么要使用委托
我正在埋头苦写程序,突然想喝水,但是又不想自己去掉杯水而打断自己的思路,于是我就想让女朋友去给我倒水。她去给我倒水,首先我得让她知道我想让她干什么,通知她之后我可以继续写自己的程序,而倒水的工作就交给了她。这样的过程就相当于一个委托。
在程序过程中,当程序正在处理某个事件的时候,我需要另外的程序代码去辅助处理一些事情,于是委托另一个程序模块去处理,而委托就可以达到这种目的,我可以利用委托通知另外的程序模块,该去调用哪个函数方法。委托其实就起到了这样一个作用,将函数签名传递到了另一个函数中。或许这样讲还是有些模糊,看看后面的具体实例。
2.委托的定义
delegate int Add(int num1,int num2); delegate void ConvertNum(string result); 上面是定义两个委托的例子,其实很简单。声明一个委托使用delegate关键字,上面分别是定义的带返回值的委托和不带返回值的委托,
两个委托都有传递参数,当然也可以不传递参数。其实委托也是一个类,委托派生为System.MulticastDelegate,而System.MulticastDelegate
又继承System.Delegate,如果你知道这个也就明白委托其实是一个特殊的类。 委托的简单实用例子
public delegate string TeaDelegate(string spText); public class DelegateSource { public void TestDelegate() { Operator op = new Operator(); TeaDelegate tea = new TeaDelegate(op.GetTea); Console.WriteLine("去给我倒杯水"); Console.WriteLine(); string result=tea("去给我倒杯水"); Thread.Sleep(5000); Console.WriteLine(result); Console.WriteLine(); } } public class Operator { /// /// 确定是否还有水 /// private bool flag = true; public string GetTea(string spText) { if (spText == "去给我倒杯水") { if (flag) { return "老公,茶来了"; } else { return "老公,没有水了"; } } return "等待......."; } } 输出结果 上面使用最普通的一种方式来定义了一个委托的使用,这个例子虽然很简单,但是能够很形象的描述委托的使用。
3.委托的三种形式
(1).推断 推断委托例子
public delegate string TeaDelegate(string spText); public class DelegateSource { public void TestDelegate() { Operator op = new Operator(); TeaDelegate tea = op.GetTea; Console.WriteLine("去给我倒杯水"); Console.WriteLine(); string result=tea("去给我倒杯水"); Thread.Sleep(5000); Console.WriteLine(result); Console.WriteLine(); } } public class Operator { /// /// 确定是否还有水 /// private bool flag = true; public string GetTea(string spText) { if (spText == "去给我倒杯水") { if (flag) { return "老公,茶来了"; } else { return "老公,没有水了"; } } return "等待......."; } } 在委托定义的例子中我们看到委托的使用方法是在委托实例化的时候指定的[new DelegateName(FunctionName)],这里可能表述不是太但是代码应该看得白了。 而委托的推断,并没有new 委托这个步骤,而是直接将Function 指定给委托。
...