A班有一个事件。 B级想要订阅它。 B类有一个事件,A类想要订阅它。
我尝试在A中创建B类对象,在B中创建A类。但这是一个僵局。
我在这里需要帮助......
灰色矩形必须是事件。箭头表示必须从一个类提升到一个类
class A
{
B b;
public event EventHandler eventA;
OnEventA()
{
eventA();
}
public A()
{
b= new B();
b.eventB += DoSomethingElse();
}
}
class B
{
A a;
public B()
{
a= new A();
a.eventA += DoSomething();
}
public event EventHandler eventB;
OnEventB()
{
eventB();
}
}
答案 0 :(得分:1)
以下是您需要的代码:
class A
{
B b;
public event EventHandler eventA;
void OnEventA()
{
var ea = this.eventA;
if (ea != null)
{
ea(this, new EventArgs());
}
}
public A()
{
this.b = new B(this);
this.b.eventB += DoSomethingElse;
}
private void DoSomethingElse(object sender, EventArgs e)
{
}
}
class B
{
A a;
public B(A a)
{
this.a = a;
this.a.eventA += DoSomething;
}
public event EventHandler eventB;
void OnEventB()
{
var eb = this.eventB;
if (eb != null)
{
eb(this, new EventArgs());
}
}
private void DoSomething(object sender, EventArgs e)
{
}
}
答案 1 :(得分:1)
假设您的问题是您没有获得正确的实例来互相交流,这里有一种方法可以帮助您:
在类型A
的构造函数中,创建类型B
的实例,并将引用设置为当前A
(this
)的实例。
public A()
{
// give B reference to A
b = new B(this);
// subscribe A to B's event
b.eventB += DoSomethingElse();
}
为了实现这一点,您需要让B
类型的构造函数接受对A
的引用,如下所示:
public B(A a)
{
// subscribe B to A's event
a.eventA += DoSomething();
}
您可能还想阅读取消订阅事件,以确保正确释放资源。请查看以下链接:
What best practices for cleaning up event handler references?
Should I always disconnect event handlers in the Dispose method?