C#: Sensibilisation hérité d'un événement
J'ai une classe de base qui contient les événements suivants:
public event EventHandler Loading;
public event EventHandler Finished;
Dans une classe qui hérite de cette classe de base j'essaie de l'événement:
this.Loading(this, new EventHandler()); //All we care about is which object is loading.
Je reçois l'erreur suivante:
L'événement " BaseClass.Chargement ne peut apparaître sur le côté gauche de l' += ou -= (BaseClass')
Je suis en supposant que je ne peut pas accéder à ces événements, le même que les autres les membres hérités?
Vous devez vous connecter pour publier un commentaire.
Ce que vous avez à faire , c'est ceci:
Dans votre classe de base (où vous avez déclaré que les événements), créer protégé des méthodes qui peuvent être utilisées pour lever les événements:
(Notez que vous devrez probablement changer de ces méthodes, afin de vérifier si vous avez d'Invoquer le gestionnaire ou pas).
Puis, dans les classes qui héritent de cette classe de base, vous pouvez simplement appeler le OnFinished ou OnLoading méthodes pour élever les événements:
Vous ne pouvez accéder à un événement dans la classe de déclaration, comme .NET crée des variables d'instance privé derrière les scènes qui détiennent effectivement le délégué. Faire cela..
est en train de faire cela;
et de...
est en fait...
De sorte que vous pouvez (évidemment), seul l'accès privé instance de délégué de la variable dans la classe de déclaration.
La convention est de fournir quelque chose comme cela dans la classe de déclaration..
Vous pouvez ensuite appeler
OnMyPropertyChanged(EventArgs.Empty)
à partir de n'importe où dans la classe ou au-dessous de la hiérarchie d'héritage d'invoquer l'événement.Précisément. Il est d'usage de fournir une fonction protégée
OnXyz
ouRaiseXyz
pour chaque événement dans la classe de base pour permettre à élever les classes héritées. Par exemple:Appelé dans la classe héritée:
Vous pouvez essayer de cette façon, Ça fonctionne pour moi:
pas de ressusciter un vieux thread mais dans le cas où quelqu'un est à la recherche, ce que j'ai fait était
Cela vous permet d'hériter de l'événement dans une classe dérivée de sorte que vous pouvez l'invoquer sans nécessiter d'envelopper la méthode tout en gardant la syntaxe+=. Je suppose qu'on peut toujours le faire avec l'emballage méthodes si vous n'avez