c# – 从基类调用事件
发布时间:2020-12-15 17:51:20 所属栏目:百科 来源:网络整理
导读:我有以下场景: public abstract class SomeBaseClass{ public event EventHandler SomeEvent; ...}public class SomeClass : SomeBaseClass{ public void DoSomething() { //TODO if (SomeEvent != null) SomeEvent(this,EventArgs.Empty); }} SomeBaseClas
我有以下场景:
public abstract class SomeBaseClass { public event EventHandler SomeEvent; ... } public class SomeClass : SomeBaseClass { public void DoSomething() { //TODO if (SomeEvent != null) SomeEvent(this,EventArgs.Empty); } } SomeBaseClass有一个需要在基类中调用的事件,但是不可能直接从基类调用该事件.为了解决这个问题,我可以覆盖基类中的事件,如下所示: public class SomeClass : SomeBaseClass { new public event EventHandler SomeEvent; 我猜这很好,但我的问题是,是否存在某种通用方法或实施上述功能的良好实践? 事实上,不可能从基类调用事件表明我不应该首先这样做,也许调用事件的责任应该只在SomeBaseClass中? 解决方法
这确实是不允许的.如果我可以推荐一种替代方法:
public abstract class SomeBaseClass { public event EventHandler SomeEvent; protected void RaiseSomeEvent(EventArgs e) { var eh = SomeEvent; if (eh != null) eh(this,e); } } public class SomeClass : SomeBaseClass { public void DoSomething() { //TODO RaiseSomeEvent(EventArgs.Empty); } } 请注意,我已将事件处理程序的调用移动到拥有类,这是.NET / C#所必需的,因为只有该类可以调用事件处理程序.其次,我通过首先将它分配给eh来使事件处理程序线程安全. 永远不要使用new关键字隐藏基类的事件!当您使用基类’type作为变量的类型或基类调用事件时,您将得到意外的结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |