C#:您不应声明事件支持字段受保护的任何原因?

Svi*_*ish 1 c# inheritance event-handling

您是否有任何理由不宣布受保护的事件支持字段?例如,为了防止必须为所有事件创建OnSomeEvent方法.例如这样:

    protected SomeEventHandler someEvent;

    readonly object someEventLock = new object();

    public event SomeEventHandler SomeEvent
    {
        add
        {
            lock (someEventLock)
                someEvent += value;
        }
        remove
        {
            lock (someEventLock)
                someEvent -= value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

当然,降级课程必须记得在举起活动时锁定等等,但无论如何.

有什么理由不应该这样做?

Jon*_*eet 6

封装.这正是你必须记住锁定子类的要点 - 这意味着暴露锁定字段等等.这是应该由类封装的实现细节.

创建一个OnSomeEvent方法意味着子类不需要知道你如何处理事件的细节 - 他们只是有办法提高它.这也减少了代码重复:有一种方法可以引发事件,而不是让代码遍布整个地方.

我更喜欢我的所有字段都是私有的,除非它们是不可变类型的公共静态只读字段(如string.Empty) - 甚至那时我倾向于偏爱属性.