Skip to content

.NET Core 实战 [No.71] 封装事件

🏷️ 《.NET Core 实战》

事件(event)是类型中的一种成员对象,它是委托(delegate)类型。主要是运用了委托可以绑定一个或多个方法的特点。关于链式委托可以参考一下这篇博客

声明事件需要用到 event 关键字,自定义 addremove 访问器方法。

  1. 定义一个委托,用来作为事件类型。

    csharp
    namespace EventSample
    {
        public class Delegates
        {
            public delegate void DemoEventDelegate(object obj, int count);
        }
    }
  2. 声明一个测试类,并包含事件成员。

    csharp
    using static EventSample.Delegates;
    
    namespace EventSample
    {
        public class Test
        {
            DemoEventDelegate _myEvent;
    
            public event DemoEventDelegate Worked
            {
                add
                {
                    if (value != null)
                    {
                        _myEvent += value;
                    }
                }
                remove
                {
                    _myEvent -= value;
                }
            }
    
            private int c = 0;
            public void Run()
            {
                _myEvent?.Invoke(this, ++c);
            }
        }
    }
  3. 实例化测试类,绑定事件并运行。

    csharp
    Test t = new Test();
    t.Worked += (k, f) => Console.WriteLine($"你已调用了 {f} 次实例。");
    
    t.Run(); // 你已调用了 1 次实例。
    t.Run(); // 你已调用了 2 次实例。
    t.Run(); // 你已调用了 3 次实例。
    t.Run(); // 你已调用了 4 次实例。
    t.Run(); // 你已调用了 5 次实例。

参考:《.NET Core 实战:手把手教你掌握 380 个精彩案例》 -- 周家安 著