2009-03-23 7 views
0

je travaille sur la construction de mes propres classes d'interface utilisateur de base. Sur eux, je veux qu'ils aient tous des propriétés et des méthodes "communes" similaires. Je pourrais définir une classe d'interface, mais l'interface semble autoriser seulement des méthodes abstraites, et aucune propriété.Propriétés et méthodes communes affectées à différents types de sous-classe

Je ne veux pas copier le même code autrement exact pour chaque classe, mais je ne sais pas comment implémenter ... Ex: Je veux que ce truc commun soit applicable aux boutons, TextBox, Checkbox, Listbox, etc. contrôles.

Suggestions ???

Répondre

0

Je viens moi-même d'un C++ - contexte où plusieurs héritage est autorisé et utilisé en extension, donc je courais souvent dans les mêmes problèmes que vous. La première chose que vous devez faire est de lire les mix-ins - ici, vous remarquerez que vous les avez utilisés vous-même tout le long, sans jamais les nommer. La deuxième étape est de commencer à reconnaître vos mixins quand vous en avez besoin, et vous découvrirez souvent que vous pourriez aussi bien les utiliser via la composition. La troisième étape est de les implémenter en utilisant la composition ... Oui, je déteste ça aussi, mais il n'y a pas moyen de contourner ça .NET (ou Java ou ...) :)

Ce que vous devriez utiliser l'héritage car ce n'est pas pour vos mixins, mais pour des trucs qui identifient vos objets. Je recommande de regarder la hiérarchie .NET pour quelques-uns des contrôles communs (zone de texte et les goûts) pour obtenir une certaine inspiration.

Bonne chance

+0

Bien que les autres réponses étaient bonnes, et sur une piste que je pensais, votre vrai à propos inhereitance multi-classe est plus ce que je cherchais.Je ne veux pas avoir à mettre explicitement dans le code identique pour chaque propriété qui fait la même chose encore et encore par classe en l'utilisant. – DRapp

1

Dans cette situation, je l'habitude d'utiliser des classes abstraites. Créez votre classe abstraite de base, puis héritez-la de vos nouveaux contrôles.

0

Vous pouvez définir les propriétés des interfaces: interface properties

public interface ISampleInterface 
{ 
    // Property declaration: 
    string Name 
    { 
     get; 
     set; 
    } 
} 
0

Vous pouvez déclarer une propriété dans une interface comme ci-dessous:

public interface IMyInterface 
{ 
    string Name { get; set; } 
    int Age { get; set; } 
} 

Cependant, dans cette situation, il ressemble à une classe abstraite serait meilleur.

0

Il est certainement possible de spécifier une propriété sur une interface

interface IFoo { 
    string Name { get; set; } 
    string Age { get; } // Read Only 
} 

Mais sinon, vous avez raison. Les interfaces ne spécifient aucun comportement et ne peuvent donc définir que des méthodes et des propriétés "abstraites". L'implémentation doit être effectuée sur chaque implémenteur. C'est le prix qui est payé pour la flexibilité dans les interfaces.

Si le comportement est vraiment identique entre toutes les classes d'enfants alors je vais habituellement pour une classe abstraite. Ou souvent une combinaison. À savoir définir une interface et une implémentation de base qui implémente cette interface.

class Foo : IFoo { 
    private string _name; 
    public Name { get { return _name; } set { _name = value; } } 
    public Age { get { return 42; } } 
} 

Cela vous permet la flexibilité d'une mise en œuvre rapide avec le choix de usincg une interface pour les classes qui pour une raison quelconque ne peut pas tirer de Foo.

0

.Net ne permet pas l'héritage multiple, mais vous pouvez utiliser une « hiérarchie d'héritage » pour organiser vos classes de base. C'est ainsi que .Net lui-même est présenté.