考虑以下代码,什么类的委托被调用?
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