什么是委托? 委托是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托特别用于实现事件和回调方法! 使用委托: public delegate void MyDelegateDemo();
private void HelloWorld() { Console.WriteLine('Hello World'); } public void Print() { MyDelegateDemo myDelegateDemo; myDelegateDemo = HelloWorld; myDelegateDemo(); } 首先我们可以看出我们使用委托时: 第一步定义一个委托类型
第二步实例化委托 MyDelegateDemo myDelegateDemo; 第三步定义一个跟委托类型相匹配的函数
第四步将函数交给委托实列 myDelegateDemo = HelloWorld; 最后我们才能使用该委托! 说一说我对委托的理解: 比如你知道定义一个普通变量
这个变量i会在后续的方法中使用 比如说 private void PrintInt(int i) { Console.WriteLine(i); } 我们后续需要输出不同的值的时候,改变一下变量即可! 那么我们定义一个委托变量
和普通变量不同的是MyDelegateDemo类型是我们自己定义的类型而已。 使用 private void PrintDelagate(MyDelegateDemo myDelegateDemo) { myDelegateDemo(); } 其实和普通变量使用方法一样而已! 而区别在于 普通变量存放的是不同的变量 而委托变量存放的是不同的方法 通过这个例子我们看出
可以看到输出内容是: 简化 我们在使用委托的时候定义起来是不是很麻烦,觉得很烦,微软也想到了这一点! 所以Action和Func就出来了,这两个有什么区别呢? 两者的区别在于Action没有返回值,而Func有返回值! 那么我们就可以简化一下PritfDocument方法 private void PritfDocument(Action myDelegateDemo) { Console.WriteLine('来到了打印店'); Console.WriteLine('打印的内容是'); myDelegateDemo(); Console.WriteLine('离开了打印店'); } 但是这样也很烦 我们还需要自己去定义一个方法呢! 所以我们使用匿名方法去掉这个步骤
那使用匿名方法让代码看起来不是那么的简洁,我们还能不能优化呢? c#作为世界上最好的语言但是也是可以的! 使用Lambda来简化, 最后变成了
PritfDocument(()=> Console.WriteLine('Hello World')); private void PritfDocument(Action myDelegateDemo) { Console.WriteLine('来到了打印店'); Console.WriteLine('打印的内容是'); myDelegateDemo(); Console.WriteLine('离开了打印店'); }
|
|