Pourquoi ne puis-je pas utiliser l'événement déclaré dans code> base code> à partir de sous code>?
3 Réponses :
Parce que les événements ne peuvent être appelés que de la classe de déclaration. Il suffit de créer une méthode dans la classe de base pour l'appeler: afin que vous puissiez l'utiliser dans des classes dérivantes et même la remplacer. P> sur une autre note, je voudrais Vous conseillez fortement de suivre les directives de conception des événements et de créer une classe EventArgs et d'utiliser le EventHandler
Les événements ne peuvent être invoqués que de la classe qui les déclare. strong> de l'extérieur de la définition d'une classe (même dans une classe dérivée), vous ne pouvez enregistrer et désenregistrer à partir d'un Ce que vous voulez faire ici est de fournir un AS une part, vous devez envisager d'utiliser le type événement code>. À l'intérieur de la classe, le compilateur vous permet seulement d'élever l'événement. Ceci est un comportement de conception de C # (qui change légèrement légèrement en C # 4 - Chris Burrows décrit les changements sur son blog ). P>
RAISELOGEvent () code> méthode dans la base classe, qui permettrait à la classe dérivée d'invoquer cet événement. p>
EventHandler <> Code> Type de délégué, Plutôt que de créer vos propres types d'événements lorsque cela est possible. p> p>
Donc, au lieu de déclarer un délégué, je fais une sous-classe d'éventuels qui conservent mon message et mon logiciel? Pourquoi est-ce mieux?
@Klundy: Le modèle standard pour le gestionnaire d'événements dans .NET est de fournir un expéditeur et un objet représentant les arguments. Cela permet aux abonnés d'envents de conserver la cohérence dans leurs signatures et de réduire la confusion sur les paramètres attendus. Avec le délégué CO / Contra-variance de C # 4, il devient plus facile d'écrire des gestionnaires d'événements génériques lorsque le gestionnaire ne se soucie pas des arguments ou de l'expéditeur. Ce que j'ai fait dans de nombreux cas, c'est créer un eventargs
evenargs code> et me permet de transmettre des données aux gestionnaires ... Mais c'est juste un choix de style.
C'est l'un des morceaux de design de design linguistiques les plus inutiles, hérannonnimestés que j'ai vus depuis longtemps.
Oui, vous pouvez déclarer des événements dans une classe de base afin qu'ils puissent également être élevés à partir de classes dérivées. p>
Créer une méthode d'invocation protégée pour l'événement. En appelant cette méthode d'invocation, les classes dérivées peuvent invoquer l'événement. P>
Lire la façon standard de le faire ici:
Comment augmenter des événements de classe de base dans des classes dérivées P>
Dupliquer - Stackoverflow.com/questions/756237/c-raising -une-hérité-hérité-ev est