두 개의 하위 클래스가있는 Facade 클래스가 있다고 가정합니다. 각 서브 시스템마다 다른 이벤트가 있습니다.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);
}
}
}
세웠 I 외관 클래스를 사용하는 다른 클래스를했습니다 나는 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
}
}
감사합니다 외관 클래스의 redifine 그것을 위해
이예,
관련 브라이언 ...
정보 숨기기로 사용합니다. 그리고 하위 클래스를 사용하는 클래스가 두 개 이상있는 경우에는 그 클래스를 다시 리플렉션해야합니다. – brian