Question

J'ai des contrôles utilisateur que je veux spécifier les propriétés et méthodes pour.

Ils héritent d'une classe de base, car ils ont tous des propriétés telles que « Foo » et « Bar », et la raison pour laquelle j'ai utilisé une classe de base est pour que je ne dois mettre en œuvre manuellement toutes ces propriétés dans chaque classe dérivée .

Cependant, je veux avoir une méthode qui est seulement dans les classes dérivées, pas dans la classe de base, comme la classe de base ne sait pas comment « faire » la méthode, donc je pense à l'aide d'une interface pour ce. Si je l'ai mis dans la classe de base, je dois définir un corps pour renvoyer une valeur (ce qui serait invalide), et assurez-vous que la méthode remplaçant ne demande pas la base. Procédé

est la bonne façon d'aller à ce sujet à utiliser à la fois la classe de base et une interface pour exposer la méthode? Il semble très rond-point, mais toutes les façons je pense à le faire semble mal ...

Permettez-moi de savoir si la question n'est pas clair, il est probablement une question stupide, mais je veux faire ce droit.

EDIT : Merci à tous les gens avec vos excellentes suggestions abstraites, mais ce brise le concepteur. Si abstraite n'a pas été une option au choix, que feriez-vous?

Était-ce utile?

La solution

vous pourriez aussi définir la méthode comme « abstraite » dans la classe de base, qui ne nécessitera pas la classe pour la mettre en œuvre. Par exemple:

abstract class A
{
   public abstract void B();
}

Bien sûr, cela va forcer votre classe de base pour être abstraite aussi bien, mais il semble que cela fonctionne très bien pour vous.

Voir méthodes abstraites sur MSDN.

Mise à jour

Depuis abstract est pas une option pour vous en raison de problèmes de concepteur, vous pouvez définir simplement la méthode dans le cadre de votre classe de base, et l'ont jeter un NotImplementedException si elle est appelée directement à partir de la classe de base:

void DerivMethod()
{
    // Must be implemented by derived class
    throw new NotImplementedException();
}

Dans le cas contraire, l'utilisation d'un interface serait bien, surtout si les feuilles au-dessus d'un mauvais goût dans la bouche ...

Autres conseils

Vous devez faire de votre classe de base une classe abstraite. Ensuite, la classe de base peut implémenter l'interface en marquant la méthode abstraite.

http://msdn.microsoft.com/ fr-fr / bibliothèque / aa664435 (VS.71) .aspx

Marquer la méthode abstraite que dans votre classe de base. Vous serez obligé de le mettre en œuvre dans les classes dérivées, mais la classe de base ne aurez pas besoin d'avoir une définition de méthode.

Je suis d'accord avec d'autres, mais en faisant votre résumé de contrôle utilisateur a quelques problèmes pour le concepteur. Le concepteur affiche souvent le contrôle abstrait utilisateur.

Je mettre en œuvre les méthodes d'interface dans la classe de base. Vous pouvez lancer une exception NotImplemented ou Assert.Fail dans les méthodes si vous voulez vous assurer que les héritiers sont de ces méthodes, correctement.

Déclarer la signature de fonction dans la classe de base et utiliser le modificateur « abstrait ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top