gpt4 book ai didi

c# - 如何将事件从 Facade 附加到另一个类

转载 作者:行者123 更新时间:2023-11-30 12:49:23 24 4
gpt4 key购买 nike

假设我的 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);
}
}
}

假设我有另一个使用外观类的类,我想附加来自 SubsystemClass1 和 SubsystemClass2 的事件。问题是如何在不在外观类中重新定义事件并且不使用子系统类(如果有的话)的情况下附加事件?

在门面类中重定义它的例子

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
}
}

提前致谢

问候布赖恩...

最佳答案

我认为您结束事件的解决方案非常好。这有什么问题?在某种程度上,您将不得不指定 SubSystemClass 或在 FacadeClass 上添加某种包装器。因为 SubSystemClasses 是私有(private)的,所以除非您向 FacadeClass 添加一些代码,否则您无法访问事件。我能想到的唯一其他选择是反射,这可能是一个可行的解决方案。

编辑:我不知道这与想要公开 s1 或 s2 的属性的情况是否有任何不同。如果您想这样做,您需要公开 s1/s2、提供包装器属性或使用反射。

关于c# - 如何将事件从 Facade 附加到另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11788142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com