考慮以下代碼,什麼類的委託被調用?
public class A
{
//...
void f()
{
B b = new B();
b.SomeEvent += this.SomeMethod;
}
void SomeMethod() {}
}
public class B
{
//...
public event SomeEventHandler SomeEvent;
void h()
{
if (SomeEvent != null)
{
SomeEvent.invoke();
}
}
}
在此代碼段,SomeEvent.invoke()
實際上調用A
類SomeMethod()
。所以在這一點上,我有幾個問題:
- 什麼樣的
A
,SomeMethod
被調用?B
如何知道要調用委託的實例? CLR如何在這裏工作? - 另外,
SomeMethod
是一個私人方法,那麼B
怎麼能夠從類A
以外調用此方法?
編輯:
閱讀前幾個答案後,我才知道,Delegate
有其代表被調用的Target
屬性。但我無法真正理解這個Target
屬性設置的步驟?誰設定的?當我寫b.SomeEvent += this.SomeMethod;
時,它是否也設置了Target
屬性?究竟如何?
最後一篇文章...這告訴我我正在尋找的東西。 +1 – Nawaz 2011-03-25 19:47:20