简单代码:
class Program
{
static void Main(string[] args)
{
A a = new A();
//Expect MemberAccessException here
//(http://msdn.microsoft.com/en-us/library/system.delegate.method.aspx)
Console.WriteLine("Delegate.Method: " + a.ACallback.Method);
Console.ReadLine();
}
}
public delegate void TestCallback();
class A
{
public TestCallback ACallback;
public A()
{
ACallback = new TestCallback(this.Some);
}
private void Some()
{
Console.WriteLine("Call Some");
}
}
没有捕捉到任何异常,为什么?
from MSDN: Delegate。方法属性
MemberAccessException:调用者没有访问方法的权限由委托表示(例如,如果方法是私有的)。
但是你的A.ACallback
是public
在我看来你的代码是完全有效的…如果由于试图访问委托的私有成员而期望抛出异常,则逻辑不正确。您正在通过类的公共成员调用私有方法,因此这很好地工作。
使TestCallback私有会导致编译时错误,我不确定你如何期望生成一个MemberAccessException?