2 votes

Nécessité d'appels de base sur les méthodes d'événements de formulaires surchargés

Lorsque l'on surcharge les méthodes d'événement d'un formulaire, je n'ai vu jusqu'à présent aucune différence entre l'appel de la méthode de base et le fait de ne pas l'appeler.

Q - Que font réellement les méthodes surchargées ?

Merci d'avance.

4voto

Hans Passant Points 475940

La documentation MSDN de ces méthodes ne s'en cache pas. Il y a une phrase "Note aux implémenteurs" qui dit que demandes que vous appelez la méthode de base. La plupart des implémentations des méthodes de base sont assez propres et ne font rien d'autre que de lever l'événement associé à la méthode. Ainsi, si vous surchargez OnPaint, que vous effectuez toute la peinture et que vous n'appelez pas base.OnPaint(), l'événement Paint ne sera pas déclenché. Cela fonctionne assez bien mais peut être une surprise désagréable pour un autre programmeur qui veut utiliser l'événement Paint et ne sait pas pourquoi son code ne fonctionne pas.

Toutes ces méthodes de base ne sont pas aussi simples, elles font parfois des choses supplémentaires. Par exemple, OnFormClosing() appelle ValidateChildren(). Cela peut avoir de l'importance, ou vous pouvez ne pas vous en soucier par accident. La complexité du contrôle est un facteur. Un bon exemple est DataGridView, il est peu probable qu'il fonctionne bien si vous ignorez les appels de base. Ce type de mauvais comportement est très difficile à diagnostiquer.

Il n'y a pas grand intérêt à prendre ce risque, vous n'avez pas la machine à remonter le temps pour vous dire que ça ne causera pas de problèmes.

Il n'y a qu'un seul aspect qui devrait vous préoccuper, et qui n'est pas mentionné dans la question. Devriez-vous appeler la méthode de base d'abord, puis écrire la personnalisation. Ou faut-il d'abord personnaliser, puis appeler la méthode de base ? C'est la raison pour laquelle ces méthodes existent. Et c'est à vous de décider qui est le patron.

2voto

Kevin Brock Points 4695

En plus des réponses spécifiques, je voudrais également souligner que c'est généralement une bonne idée de toujours appeler la méthode de base que vous avez surchargée, même si vous savez (peut-être par décompilation) que la méthode ne fait rien. La raison : le fournisseur d'API peut ajouter à l'avenir du code à cette méthode qui est essentiel au bon fonctionnement de la classe. Cela peut se faire par le biais d'une correction de bogue ou d'une nouvelle version. Vous n'avez aucun moyen de savoir si le fournisseur apportera ces modifications et si, le cas échéant, votre code n'appelle pas la méthode de base, vous rencontrerez des problèmes étranges alors qu'auparavant votre code fonctionnait parfaitement.

J'ai pour règle de toujours appeler la méthode de base, à moins d'avoir une raison très claire pour laquelle je dois complètement remplacer toute la fonctionnalité de cette méthode de base.

0voto

SLaks Points 391154

Les méthodes de base déclenchent elles-mêmes les événements.

Si vous ne les appelez pas, les gestionnaires normaux ne s'exécuteront jamais.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X