2009-05-21 4 views
1

J'ai une question de conception. Lors de l'écriture d'une application où plusieurs composants partagent certains attributs et diffèrent dans d'autres à la fois en termes de GUI (Windows Forms) et back end, comment pourrait-on théoriquement s'en approcher?Interfaces, héritage et formes de fenêtres dans C#

Par exemple, j'ai une application où j'ai 4 types différents d'un produit. Les formulaires de saisie des détails du produit partagent tous trois champs différents. Jusqu'à présent, facile - avoir une classe de base, puis dériver les 4 formes de cette classe de base. Cependant, disons, 2 produits partagent un certain comportement qui est LE MÊME pour les deux. Bien sûr, je pourrais avoir une interface qui définit des méthodes, puis avoir ces 2 formulaires d'entrée de produit implémenter cette interface, mais puisque l'interface ne fournit aucune implémentation par défaut, ne serait-ce pas un gâchis de faire cela? Puisque je devrais fournir une implémentation dans chaque classe et si c'est exactement la même chose, ce serait une répétition de code.

Je pourrais bien sûr mettre cette méthode dans la classe de base et en avoir 2 formes dérivées. Si mes formulaires partagent plus d'un élément commun et ne partagent pas d'autres éléments, quelle serait la façon la plus logique et la plus logique de représenter cela sans avoir à me couper les cheveux?

Répondre

0

Une façon d'obtenir un comportement commun en deux classes est pour les deux classes à contiennent que le comportement en tant que membre, au lieu de héritant ce comportement: des formes, cela pourrait signifier la définition d'un (« contrôle utilisateur » à savoir une collection réutilisable de contrôles communs).

+0

Cela ne signifie-t-il pas une répétition? – sarsnake

+0

Ce n'est pas copier-coller; il est dit que les deux formulaires incluent, comme membre de données, une instance de la classe MyUserControlWithABunchOfCommonFunctionality. – ChrisW

0

Difficile à dire sans mise en page spécifique. En général, l'autre forme de réutilisation, souvent plus souple, consiste à faire de la composition plutôt que de l'héritage. En fait, la hiérarchie de contrôle montre à quel point la composition peut aller fort. Pourquoi ne pas séparer les parties de votre interface utilisateur en commandes personnalisées qui sont assemblées en fonction de la mise en page du produit que vous recherchez

2

Pourquoi les 2 classes indépendantes ne dérivent pas directement de votre classe de base, puis créent une nouvelle classe avec le commun fonctionnalité et est dérivé de la classe de base et les deux classes restantes héritent de cette nouvelle classe?

BaseClass 
CommonClass : BaseClass 
ClassA : BaseClass 
ClassB : BaseClass 
ClassC : CommonClass 
ClassD : CommonClass