Код: Выделить всё
public void Foo(object? sender, EventArgs e)
{
Console.WriteLine("Foo");
}
Код: Выделить всё
var x = new EventHandler(Foo); // Delegate from method group Foo
var y = new EventHandler(x); // Delegate from another EventHandler delegate
Код: Выделить всё
x.Invoke(null, null); // "Foo"
y.Invoke(null, null); // "Foo"
Код: Выделить всё
ReferenceEquals(x, y); // false, as expected, these are different instances
Equals(x, y); // false
x.Equals(y); // false
Код: Выделить всё
var x1 = new EventHandler(Foo);
var y1 = new EventHandler(Foo);
ReferenceEquals(x1, y1); // false, as expected, these are different instances
Equals(x1, y1); // false
Мне кажется, что делегаты, созданные из других экземпляров делегата, работают для них как что-то вроде оболочки. Однако мне не удалось найти описание этого в документации (было бы здорово дать ссылку на что-нибудь, описывающее это).
Мне хотелось бы знать, как это на самом деле работает и почему существует разница в значениях Target. Есть ли сценарий, в котором эта разница необходима?