I never seem to understand why we need delegates? I know they are immutable reference types that hold reference of a method but why can't we just call the method directly, instead of calling it via a delegate?
Thanks
Jon*_*eet 59
简单回答:需要执行操作的代码不知道写入时要调用的方法.如果你在编译时知道要调用哪种方法,你只能直接调用该方法,对吧?因此,如果您想要抽象出"在适当的时间执行操作X"的想法,您需要对操作进行一些表示,以便调用操作的方法不需要提前知道确切的实现.
例如:
Enumerable.Select
在LINQ中,除非你告诉它,否则无法知道你想要使用的投影Button
不知道你想要什么动作它可能会帮助您将委托视为单方法接口,但具有大量语言语法以使其易于使用,并且支持异步执行和多播.
Tal*_*ner 33
当然,您可以直接在对象上调用方法,但请考虑以下方案:
Select
方法提供很多实现.Ode*_*ded 17
因为您可能不具有该方法写入的,要么你在这样的它,用户可以决定什么方法(即用户写)用户想要你的类来执行的方式设计类.
它们还使某些设计更干净(例如,代替您调用不同方法的switch语句,调用传入的委托)并且更容易理解并允许扩展代码而不更改它(想想OCP).
代表也是事件系统的基础 - 编写和注册没有代表的事件处理程序将比使用它们更难.
看看Linq 的不同Action
和Func
代表 - 如果没有它们,它几乎没有用.
话虽如此,没有人强迫你使用代表.
归档时间: |
|
查看次数: |
29411 次 |
最近记录: |