Как C# события могут отслеживать методы экземпляра? - PullRequest
0 голосов
/ 26 марта 2020

Как событие может отслеживать не только метод, но и объект?

, например, myobject здесь:

myPublisher.myEvent += myobject.FooMethod;

И полный пример программы:

class Program
{
    private int Foos = 3;
    static void Main(string[] args)
    {
        var p = new Program();
        var p2 = new Program();
        p2.Foos = -10;
        p.MySecretFooIncreaser(null,null);
        var pub = new MyPublisher();
        pub.MyCrazyEvent += p.MySecretFooIncreaser;
        pub.MyCrazyEvent += p2.MySecretFooIncreaser;
        System.Console.WriteLine("time to raise event");
        pub.RaiseEvent();
    }
    private void MySecretFooIncreaser(Object sender, EventArgs e){
        System.Console.WriteLine($"increasing Foos from {Foos} to {++Foos}");
    }
}


class MyPublisher{
    public event EventHandler MyCrazyEvent = delegate {};
    public void RaiseEvent(){
        MyCrazyEvent?.Invoke(this, new EventArgs());
    }
}

Вывод терминала:

increasing Foos from 3 to 4
time to raise event
increasing Foos from 4 to 5
increasing Foos from -10 to -9

Я не нашел места, чтобы прочитать об этом поведении. Может ли кто-нибудь указать мне хороший ресурс для изучения C# «низкого уровня, что на самом деле происходит» так, как вы узнаете о «git сантехнике» против «git фарфора». Это всего лишь один из примеров, когда учебный материал, который я нашел [0], не объясняет всего того, что необходимо для долгосрочного понимания.

[0] - C# 8.0 и. NET Core 3.0 + Экзамен № 70-483 Программирование в C#

1 Ответ

0 голосов
/ 27 марта 2020

Делегаты Microsoft

Как говорит Мар c Грэвелл, теперь он находится в официальных документах.

Делегаты похожи на указатели функций C ++, но делегаты полностью объектно-ориентированы и, в отличие от указателей C ++ на функции-члены, делегаты инкапсулируют как экземпляр объекта, так и метод.

Но во многих случаях делегаты описываются только как:

Делегат - это тип, представляющий ссылки на методы с определенным списком параметров и типом возвращаемого значения.

Отсюда путаница для начинающего, такого как я.

...