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)
当然,降级课程必须记得在举起活动时锁定等等,但无论如何.
有什么理由不应该这样做?
封装.这正是你必须记住锁定子类的要点 - 这意味着暴露锁定字段等等.这是应该由类封装的实现细节.
创建一个OnSomeEvent方法意味着子类不需要知道你如何处理事件的细节 - 他们只是有办法提高它.这也减少了代码重复:有一种方法可以引发事件,而不是让代码遍布整个地方.
我更喜欢我的所有字段都是私有的,除非它们是不可变类型的公共静态只读字段(如string.Empty) - 甚至那时我倾向于偏爱属性.