首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >委托关键字与委托关键字

委托关键字与委托关键字
EN

Stack Overflow用户
提问于 2009-04-22 20:21:05
回答 6查看 11.9K关注 0票数 44

如果你想创建自定义委托,你可以使用小写的delegate关键字。

您可以对实际的Delegate类做什么?这有什么好处呢?我不明白到底有什么不同。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-04-22 20:27:01

来自http://msdn.microsoft.com/en-us/library/system.delegate.aspx

Delegate类是委托类型的基类。但是,只有系统和编译器才能显式地从Delegate类或MulticastDelegate类派生。也不允许从委托类型派生新类型。Delegate类不被视为委托类型;它是用于派生委托类型的类。

大多数语言实现delegate关键字,并且这些语言的编译器能够从MulticastDelegate类派生;因此,用户应该使用该语言提供的delegate关键字。

票数 41
EN

Stack Overflow用户

发布于 2009-04-22 20:30:39

delegate关键字是让编译器为你做一些魔术。当您使用自定义签名声明新委托时,

  • 编译器会为您创建一个从MulticastDelegate派生的新类型(而该类型又派生自委托)。
  • 编译器会使用您的自定义Invoke添加一个Invoke方法,编译器会为这个新类型添加BeginInvoke和EndInvoke方法

所以现在当你调用delObject(args)时,编译器会把它翻译成delObject.Invoke(args)

Delegate基类提供一些功能,例如

  1. CreateDelegate (用于获取包装静态/实例方法的委托)
  2. DynamicInvoke (用于调用带有参数列表的委托-延迟bound)
  3. Combine和Remove (用于委托链接..将多个委托链接在一起(例如,一个事件的多个事件处理程序委托)

C#编译器禁止您在代码中明确地从委托派生。您必须使用委托关键字。

票数 40
EN

Stack Overflow用户

发布于 2009-04-22 20:56:38

使用delegate关键字可以做的另一件巧妙的事情是内联创建委托,而不必声明它们,例如:

代码语言:javascript
复制
// constructor
public Form1()
{
    this.Load += delegate(object sender, EventArgs e)
    {
         // Form1_Load code goes right here
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/779021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档