c# – 如何将场景中的事件附加到另一个类
发布时间:2020-12-15 21:37:56 所属栏目:百科 来源:网络整理
导读:假设我的Facade类有两个子系统类.每个子系统都有不同的事件 FacadeClass是 public class FacadeClass{ private SubsystemClass1 _s1; private SubsystemClass2 _s2; public FacadeClass() { _s1 = new SubsystemClass1(); _s2 = new SubsystemClass2(); }}
假设我的Facade类有两个子系统类.每个子系统都有不同的事件
FacadeClass是 public class FacadeClass { private SubsystemClass1 _s1; private SubsystemClass2 _s2; public FacadeClass() { _s1 = new SubsystemClass1(); _s2 = new SubsystemClass2(); } } 和SubsystemClass1 public class SubsystemClass1 { public event EventHandler FetchComplete; public void OnFetchComplete(EventArgs e) { if (FetchComplete != null) { FetchComplete(this,e); } } } 然后是SubsystemClass2 public class SubsystemClass2 { public event EventHandler SendComplete; public void OnSendComplete(EventArgs e) { if (SendComplete != null) { SendComplete(this,e); } } } 假设我有另一个使用facade类的类,我想从SubsystemClass1和SubsystemClass2附加事件.问题是如何在没有使用子系统类(如果有的话)的情况下在没有redifine的情况下附加事件? 在外观类中重新设置它的示例 public class FacadeClass { private SubsystemClass1 _s1; private SubsystemClass2 _s2; public FacadeClass() { _s1 = new SubsystemClass1(); _s2 = new SubsystemClass2(); } // Redifine the event public event EventHandler FetchComplete { add { _s1.FetchComplete += value; } remove { _s1.FetchComplete -= value; } } public event EventHandler SendComplete { add { _s2.SendComplete += value; } remove { _s2.SendComplete -= value; } } } 使用子系统类的示例,使它们都是公共的 public class FacadeClass { // Make both class to public public SubsystemClass1 _s1; public SubsystemClass2 _s2; public FacadeClass() { _s1 = new SubsystemClass1(); _s2 = new SubsystemClass2(); } } public class AnotherClass { FacadeClass _fd; public AnotherClass() { _fd = new FacadeClass(); // Little bit ugly _fd._s1.FetchComplete += new EventHandler(_s1_FetchComplete); } void _s1_FetchComplete(object sender,EventArgs e) { // Do Something Here } } 提前致谢, 对Brian说… 解决方法
你的事件包装解决方案似乎对我很好.这有什么问题?在某种程度上,您将不得不指定SubSystemClass或在FacadeClass上添加某种包装器.因为SubSystemClasses是私有的,所以除非你向FacadeClass添加一些代码,否则无法访问事件.我能想到的唯一另一个选择是反思,这可能是一个可行的解决方案.
编辑:我不知道这是否与想要暴露s1或s2的属性的情况有任何不同.如果你想这样做,你需要公开s1 / s2,提供包装属性或使用反射. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |