Абонентскому методу не нужно создавать экземпляр делегата? - PullRequest
1 голос
/ 25 февраля 2011

Проведение такого мероприятия:

class ABC
{
delegate bool X (int a);
event X eventX;
}

ABC.eventX+=someMethod; //works

Я предполагаю, что делегат затем неявно создается компилятором?

Ответы [ 2 ]

6 голосов
/ 25 февраля 2011

Да, до .NET 2 вы должны были указать его вручную:

ABC.eventX+=new X(someMethod);

Но теперь он создается неявно с этим синтаксисом:

ABC.eventX+=someMethod;
0 голосов
/ 25 февраля 2011

Да, он создается автоматически.

Например:


namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            (new Program()).Entrance();
        }

        public void Entrance()
        {
            ABC a = new ABC();
            a.eventX += callback;
        }

        protected bool callback(int a)
        {
            return true;
        }
    }

    class ABC
    {
        public delegate bool X(int a);
        public event X eventX;
    }
}

Класс программы будет таким, если вы увидите в отражателе:


internal class Program
{
    // Methods
    protected bool callback(int a)
    {
        return true;
    }

    public void Entrance()
    {
        ABC a = new ABC();
        a.eventX += new ABC.X(this.callback);
    }

    private static void Main(string[] args)
    {
        new Program().Entrance();
    }
}



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