Si j'ai une classe qui déclenche un événement, avec (par exemple) FrobbingEventArgs, suis-je autorisé à le gérer avec une méthode qui prend EventArgs?En C#, les arguments du gestionnaire d'événements sont-ils contravariants?
Voici quelques code:
class Program
{
static void Main(string[] args)
{
Frobber frobber = new Frobber();
frobber.Frobbing += FrobberOnFrobbing;
frobber.Frob();
}
private static void FrobberOnFrobbing(object sender,
EventArgs e)
{
// Do something interesting. Note that the parameter is 'EventArgs'.
}
}
internal class Frobber
{
public event EventHandler<FrobbingEventArgs> Frobbing;
public event EventHandler<FrobbedEventArgs> Frobbed;
public void Frob()
{
OnFrobbing();
// Frob.
OnFrobbed();
}
private void OnFrobbing()
{
var handler = Frobbing;
if (handler != null)
handler(this, new FrobbingEventArgs());
}
private void OnFrobbed()
{
var handler = Frobbed;
if (handler != null)
handler(this, new FrobbedEventArgs());
}
}
internal class FrobbedEventArgs : EventArgs { }
internal class FrobbingEventArgs : EventArgs { }
La raison pour laquelle je demande est que semble ReSharper d'avoir un problème avec (ce qui ressemble à) l'équivalent en XAML, et je me demande si c'est un bogue dans ReSharper, ou une erreur dans ma compréhension de C#.
Il est un bon exemple de frobnication :) –