Pourquoi le code suivant n'imprime pas "Hello, World!"?Pourquoi les événements C# ne peuvent pas être directement souscrits à d'autres événements
using System;
namespace Test
{
public class Program
{
public static void Main(string[] args)
{
var a = new A();
var b = new B(a);
b.Evnt += val => Console.WriteLine(val);
a.Do();
}
}
public class A
{
public void Do()
{
Evnt("Hello, World!");
}
public event Action<string> Evnt = v => {};
}
public class B
{
public B(A a)
{
a.Evnt += Evnt; // this does not work
}
public event Action<string> Evnt = v => {};
}
}
Mais si je remplace la ligne
a.Evnt += Evnt;
avec
a.Evnt += v => Evnt(v);
tout fonctionne très bien.
Si cela est interdit, quel sens a souscrit un événement à un autre, et pourquoi n'y a-t-il pas d'erreur de compilation ou d'avertissement?