Delegate就是接口,我是这样理解它的.
后来发现Delegate比起接口可以"乱用".因为它只要方法的签名一样就可以替换.比如下面这个例子.

 

Delegate和Command Patternpublicclass Client  }

这下可好,如果象下面这样用,结果岂不变成-1了

Delegate和Command PatternClient c=new Client();  Delegate和Command Patternc.Add =new Client.AddHandle(new Math().Sub); 
Delegate和Command Patternc.Do();

如果用接口,约束性就强了点.

Delegate和Command Patternpublicclass Client c.Do();

这样不太可能出上面那样的错误. 不过Delegate这么灵活也不全是错.
如果Math中的方法是Static的(也是很有可能的),那接口就傻眼了,但是Delegate照样能搞定.
根据Delegate的这个灵活的特点,我想了一个合理的应用---计算工资.

Delegate和Command Patternpublic  delegatedouble OperationHandle(double a, double b); Delegate和Command Pattern
Delegate和Command Pattern
publicclass Math

加加减减,甚至乘除,只要绑定上不同的operation就ok了,这样岂不是很方便? 如果用接口实现呢?

Delegate和Command Patternpublicinterface OperationHandle }

可以看出这就是Command模式. 还有好玩的,Delegate不是可以使用多播嘛(+=),用在这里就更好玩了.

Delegate和Command Patternpublic  delegateint OperationHandle(int a, int b); Delegate和Command Pattern
Delegate和Command Pattern
publicclass Math

很方便吧,接口也能做.Command加上Composition,不过要想变换参数似乎有点困难,(这仅仅是个例子,不考虑那么多了)

Delegate和Command Pattern Delegate和Command Patternpublicclass Composite : OperationHandle }

看完这些你感觉怎么样?难怪有人说.net的架构师是Delegate先生,delegate做的事,interface
基本上都能做,不过delegate是带来了不少方便,不过初学者比较难理解delegate这个概念,而且如前文所说
delegate在带来灵活性的同时也带来了一定的危险.

相关文章:

  • 2021-11-09
  • 2022-02-14
  • 2021-07-16
  • 2022-12-23
  • 2021-11-13
  • 2021-12-02
  • 2021-10-12
  • 2021-04-27
猜你喜欢
  • 2021-07-14
  • 2022-01-03
  • 2021-06-18
  • 2022-12-23
  • 2021-10-03
相关资源
相似解决方案