繁体   English   中英

在C#中,将EventHandler类型的var等同于委托是什么意思?

[英]What does equating an EventHandler type var to a delegate mean in C#?

我认为我对CSharp陌生。 我在代码中遇到过这一部分,并且无法理解它的作用。

我还没看到EventHandler等于委托吗? 那是做什么的? 当然,下面是完整代码的摘录,因为我希望这足以使某人理解将事件处理程序等同于委托的一般概念。 谢谢。

public class xyz : ViewModelBase
{
   protected EventHandler modelChanged = null;
   public xyz (  int a, int b)
   {
       this.modelChanged =
            delegate
            {
                // check for changes.
                if (this.ChangesExist == false)
                {
                    // set the flag
                    this.ChangesExist = true;

                    // append the title.
                    currentTitle += "*";

                    _changeTitle(currentTitle);
                }

            };
    }
}

我还没看到EventHandler等于委托吗?

EventHandler委托类型

public delegate void EventHandler(
    Object sender,
    EventArgs e
)

(为简单起见,删除了属性。)

在这种情况下,您看到的是一个匿名方法 -一种从“内联”代码块创建委托的方法。 如今, Lambda表达式是实现这一目标的一种更为普遍的方式。 (在C#2中引入了匿名方法;在C#3中引入了lambda表达式。)lambda表达式和匿名方法都可以转换为委托实例。 一些lambda表达式也可以转换为表达式树,以用于需要分析表达式内逻辑的代码。

如果您一般来说不熟悉代表,那么您可能还想阅读我有关代表和事件的文章。

EventHandler 具有特定签名的delegate

[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void EventHandler(
    Object sender,
    EventArgs e
)

如果您对等号感到困惑,则不是处理程序等同于委托,而是委托分配给 modelChanged属性。

如果您认为它像C / C ++一样,那么modelChanged本质上是一个函数指针,在C#中,该类型的功能是通过委托提供的。 有几种类型的代表,如果您想在msdn上阅读,则可以阅读有关它们的信息,但是为了简洁起见,我不会赘述。 本质上,您在声明一个EventHandler ,它是一种委托。 然后,在xyz内部,您实际上是在定义方法并将其分配给modelChanged 稍后在代码中,如果调用modelChanged ,它将导致执行在xyz分配给它的代码。

EventHandler只是Microsoft声明的一种委托,因此它可以用作任何其他委托,您可以在类中拥有它的实例,并可以像代码中那样使用匿名委托来分配实现。 像这样使用它不是最佳实践,因为它具有MS打算达到的某些特殊目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM