简单代码:
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");
}
}
并没有发现任何异常,为什么?
答案 0 :(得分:1)
MemberAccessException:调用者无权访问该方法 由委托代表(例如,如果方法是私有的)。
但您的A.ACallback
是public
。
答案 1 :(得分:0)
在我看来,您的代码完全有效...如果您希望抛出异常,因为您尝试访问委托的私有成员,那么您的逻辑是不正确的。你是通过类的公共成员调用私有方法,所以这很好。
将TestCallback设为私有会导致编译时错误我不确定您希望如何生成MemberAccessException?