Как событие может отслеживать не только метод, но и объект?
, например, 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#