Почему MemberAccessException не выкидывает? - PullRequest
1 голос
/ 19 сентября 2011

простой код:

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 ]

1 голос
/ 19 сентября 2011

из MSDN: Delegate.Method Property

MemberAccessException: у вызывающей стороны нет доступа к методу представлен делегатом (например, если метод является закрытым).

но ваш A.ACallback равен public.

0 голосов
/ 19 сентября 2011

Мне кажется, что ваш код совершенно корректен ... если вы ожидаете, что будет сгенерировано исключение, потому что вы пытаетесь получить доступ к приватному члену делегата, ваша логика неверна Вы вызываете приватный метод через открытый член класса, так что это работает просто отлично.

Если сделать TestCallback закрытым, это приведет к ошибке времени компиляции. Я не уверен, как вы ожидаете генерировать исключение MemberAccessException?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...