为什么MemberAccessException没有抛出?

时间:2011-09-19 11:55:43

标签: c# exception reflection

简单代码:

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");
    }
}

并没有发现任何异常,为什么?

2 个答案:

答案 0 :(得分:1)

来自MSDN的

Delegate.Method Property

  

MemberAccessException:调用者无权访问该方法   由委托代表(例如,如果方法是私有的)。

但您的A.ACallbackpublic

答案 1 :(得分:0)

在我看来,您的代码完全有效...如果您希望抛出异常,因为您尝试访问委托的私有成员,那么您的逻辑是不正确的。你是通过类的公共成员调用私有方法,所以这很好。

将TestCallback设为私有会导致编译时错误我不确定您希望如何生成MemberAccessException?