C#:为什么不应该声明事件支持字段受保护?

C#:为什么不应该声明事件支持字段受保护?,c#,inheritance,event-handling,C#,Inheritance,Event Handling,是否有任何理由不应声明事件支持字段受保护?例如,防止必须为所有事件创建OnSomeEvent方法。例如: protected SomeEventHandler someEvent; readonly object someEventLock = new object(); public event SomeEventHandler SomeEvent { add { lock (someEventLock

是否有任何理由不应声明事件支持字段受保护?例如,防止必须为所有事件创建OnSomeEvent方法。例如:

    protected SomeEventHandler someEvent;

    readonly object someEventLock = new object();

    public event SomeEventHandler SomeEvent
    {
        add
        {
            lock (someEventLock)
                someEvent += value;
        }
        remove
        {
            lock (someEventLock)
                someEvent -= value;
        }
    }
当然,降级类必须记住在引发事件时锁定,等等,但无论如何


有什么不应该这样做的原因吗?

封装。这正是关于子类必须记住锁定的要点——这意味着也要公开锁定字段,等等。这是应该由类封装的实现细节

创建一个
OnSomeEvent
方法意味着子类不需要知道如何处理事件的细节——它们只是有一种引发事件的方法。这也减少了代码重复:有一种方法可以引发事件,而不是让代码到处都是


我希望我的所有字段都是私有的,除非它们是不可变类型的公共静态只读字段(如
string.Empty
)——即使这样,我也倾向于使用属性。

封装。这正是关于子类必须记住锁定的要点——这意味着也要公开锁定字段,等等。这是应该由类封装的实现细节

创建一个
OnSomeEvent
方法意味着子类不需要知道如何处理事件的细节——它们只是有一种引发事件的方法。这也减少了代码重复:有一种方法可以引发事件,而不是让代码到处都是

我希望我的所有字段都是私有的,除非它们是不可变类型的公共静态只读字段(如
string.Empty
)——即使这样,我也倾向于选择属性