与代表有什么交易?

m.e*_*son 7 c# vb.net asp.net

我理解委托封装了方法调用.但是我很难理解他们的需求.为什么要使用代表,他们设计的是什么情况?

sum*_*mer 11

委托基本上是方法指针.委托让我们创建一个引用变量,但它不是引用类的实例,而是引用类中的方法.它引用任何具有返回类型且具有与该委托指定的参数相同的参数的方法.这是一个非常有用的事件方面.为了全面阅读,我建议你阅读Head First C#中的主题(Andrew Stellman和Jennifer Greene).它精美地解释了委托主题以及.NET中的大多数概念.


Jon*_*eet 8

嗯,一些常见的用途:

  • 事件处理程序(在UI代码中很常见 - "单击按钮时,我希望此代码执行")
  • 来自异步调用的回调
  • 为线程(或线程池)提供要执行的新任务
  • 指定LINQ投影/条件等

不要将它们视为封装方法调用.将它们视为用特定签名封装一些任意位的行为/逻辑."方法"部分有点无关紧要.

另一种思考委托类型的方法是作为单方法接口.一个很好的例子是IComparer<T>接口及其双重Comparison<T>委托类型.它们代表了同样的基本理念; 有时,将其表达为委托更容易,有时候界面会让生活变得更轻松.(当然,您可以轻松编写代码以在两者之间进行转换.)


And*_*ber 5

从广义上讲,它们的设计是因为当您拥有需要调用其他代码的代码时 - 但是您在编译时不知道其他代码可能是什么.

例如,考虑使用委托的Windows窗体Button.Click事件.Windows窗体程序员知道,当按下按钮时你会想要发生一些事情,但是他们无法准确知道你想要做什么......它可能是任何东西!

因此,您创建一个方法并将其分配给委托并将其设置为该事件,而您就是这样.这是代表们的基本推理,尽管他们有很多其他相关的好用途.