[英]c# classes Subscribing to events of each other
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();
}
}
這是您需要的代碼:
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)
{
}
}
假設您遇到的問題是您沒有正確的實例來互相交談,那么以下一種方法可能會幫助您:
在類型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();
}
您可能還想閱讀有關取消訂閱事件的信息,以確保您正確釋放資源。 檢查以下鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.