c# - 关键字 'event' 在 C# 中是可选的吗?

标签 c# events compiler-construction

eventOne(带关键字“event”)和 eventTwo(不带关键字)有什么区别?

class Program
{
    public event EventHandler eventOne;
    public EventHandler eventTwo;

    public void RaiseOne()
    {
        if (eventOne != null)
            eventOne(this, EventArgs.Empty);
    }

    public void RaiseTwo()
    {
        if (eventTwo != null)
            eventTwo(this, EventArgs.Empty);
    }

    static void Main(string[] args)
    {
        var p = new Program();
        p.eventOne += (s, e) => Console.WriteLine("One");
        p.eventTwo += (s, e) => Console.WriteLine("Two");
        p.RaiseOne();
        p.RaiseTwo();
    }
}

最佳答案

  • eventOne 是由 EventHandler 类型的私有(private)字段支持的公共(public)事件
  • eventTwoEventHandler 类型的公共(public)字段

基本上,事件封装了“订阅”和“取消订阅”的概念,就像属性仅封装了“获取”和“设置”的概念而不是实际存储一样。 (就 CLR 而言,事件也可以公开“raise”方法,但 C# 从未使用过此方法。忽略它。)

参见 my article on events ( alternate link ) 了解更多关于委托(delegate)和事件之间的区别。

关于c# - 关键字 'event' 在 C# 中是可选的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/711732/

相关文章:

c# - 数据库未更新

c# - 静态属性最终会出现在 gen2 中吗?

c# - ASP.Net MVC 4 自定义 ValidationAttribute 依赖注入(inject)

c# - 如何将委托(delegate)作为参数传递给订阅事件处理程序?

assembly - 编程语言编译器首先翻译为汇编代码还是直接翻译为机器代码?

c# - 将现有的 Node Js 项目添加到现有的 .Net 解决方案

c# - 如何取消注册我的 Lambda 回调?

javascript - JS触摸事件挂件点击

parsing - LR(1) 解析器状态大小仍然是一个问题吗?

c# - 对数字文字使用 f 后缀