Je comprends que l'on peut déclencher un événement dans la classe que la déclaration de mise en œuvre se produit, mais je tiens à soulever l'événement au niveau de la classe de base et ont l'événement de la classe dérivée ressusciteront:événement de collecte de la classe de base
public interface IFoo
{
event EventHandler<FooEventArgs> FooValueChanged;
void RaiseFooValueChanged(IFooView sender, FooEventArgs e);
}
[TypeDescriptionProvider(typeof(FooBaseImplementor))]
public abstract class FooBase : Control, IFoo
{
public virtual event EventHandler<FooEventArgs> FooValueChanged;
public void RaiseFooValueChanged(IFooView sender, FooEventArgs e)
{
FooValueChanged(sender, e);
}
}
Je ne peux pas avoir le résumé d'événement FooValueChanged, car la classe de base ne peut pas déclencher l'événement. Le code actuel s'exécute, mais l'appel FooValueChanged (expéditeur, e) renvoie une exception NullReferenceException car il n'appelle pas l'événement de la classe dérivée, uniquement celui de la classe de base.
Où est-ce que je me trompe?
Je peux avoir l'événement et l'élévateur à la fois abstrait, mais alors je dois me rappeler d'appeler FooValueChanged (expéditeur, e) dans chaque classe dérivée. J'essaie d'éviter cela tout en étant capable d'utiliser le concepteur Visual Studio pour les contrôles dérivés.
Pour toute personne lisant cette question qui est perplexe sur pourquoi j'ai TypeDescriptionProvider: http://www.urbanpotato.net/default.aspx/document/2001 – Llyle