c# - 在 C# 中将 EventHandler 类型 var 等同于委托(delegate)意味着什么?

标签 c# delegates event-handling

我认为自己是 CSharp 的新手。我遇到过这段代码,但无法理解它的作用。

我没有在任何地方看到 EventHandler 等于委托(delegate)?那有什么作用?当然,下面是完整代码的摘录,因为我希望这足以让某人理解将事件处理程序等同于委托(delegate)的一般概念。谢谢。

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);
                }

            };
    }
}

最佳答案

I have not seen enywhere that an EventHandler is equal to a delegate ?

EventHandlerdelegate type .

public delegate void EventHandler(
    Object sender,
    EventArgs e
)

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

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

如果您总体上对委托(delegate)相当陌生,您可能还想阅读我关于 delegates and events 的文章.

关于c# - 在 C# 中将 EventHandler 类型 var 等同于委托(delegate)意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18664681/

相关文章:

c# - ServiceBus 抛出 401 未授权错误

c# - 当我尝试通过HttpWebRequest上传音频文件时,Hololens应用程序卡住了

ios - swift 将 View 设置为自己的委托(delegate)

javascript - 处理程序无法在 JavaScript 中工作

c# - 如何根据命令行中的列表框选择执行单独的脚本?

C# 属性 - 在 setter 访问器中添加逻辑

c# - 当无法事先知道方法签名时,如何从 MethodInfo 创建委托(delegate)?

c# - Dispatcher.BeginInvoke ,尝试使用 lambda 从文本 block 获取字符串集,但出现转换错误

javascript - 在 jQuery 中绑定(bind)现有的 JavaScript 函数

java - Java 应用程序级别的关键事件