2009-10-14 10 views
1

J'ai 2 classeEst-il possible d'avoir 2 classes de base qui héritent déjà d'un héritage ou d'une troisième classe commune?

de classe 1.

public class BaseContentPage : System.Web.UI.Page 
{ 

} 

classe 2.

public class BaseUserControl : System.Web.UI.UserControl 
{ 


} 

Et maintenant, je veux qu'ils soient au courant de cette classe.

public class BaseCommon 
{ 
    public string Variable1 { get; set; } 
    public string Variable2 { get; set; } 
    public string Variable3 { get; set; } 
} 

Comment je fais est actuellement en faisant les variables de la classe statique comme BaseCommon si

public static string Variable1 { get; set; } 
public static string Variable2 { get; set; } 
public static string Variable3 { get; set; } 

Comment puis-je faire cela?

Répondre

5

Utiliser la composition.

Donne à BaseContentPage et BaseUserControl un champ privé (qui peut être exposé en tant que propriété si nécessaire) de type BaseCommon (ne le rend pas statique).

Ils peuvent soit créer BaseCommon, soit faire passer une instance par le constructeur (Dependency Injection).

+0

Hey j'allais dire ça ;-) –

0

Si elles sont statiques, cela signifie-t-il que cette troisième classe est une ressource globale? Vous pouvez regarder des conteneurs Singleton ou IoC ou passer l'instance aux autres classes lors de la construction.

Vous devez donner des exemples plus concrets de ce que sont ces données de base communes que vous ajoutez à deux parties différentes de votre arbre d'héritage d'objet. En théorie, disons que chaque instance a vraiment des données similaires (un exemple auquel je pense est l'internationalisation, par exemple, qui est utilisée pour personnaliser à la fois une page et un contrôle utilisateur en fonction des ID de phrase, etc. qui sont spécifiques au contexte) , alors ce que vous pouvez faire est d'avoir une classe I18nSettings qui implémente II18nSettings. Puis dans chaque classe, encapsulez une instance I18nSettings et implémentez II18nSettings et passez-les. Vous pouvez également exposer l'instance interne I18nSettings. J'ai même juste défini une interface et j'ai demandé à chaque classe de l'implémenter - ça ne valait pas la peine d'avoir une classe séparée du tout.

Il existe d'autres options pour faire ce genre de chose - cela dépend si les classes concrètes dont vous héritez implémentent des choses beaucoup plus utiles que les choses que vous ajoutez. Il peut être plus sensé d'hériter de votre classe concrète et d'implémenter d'autres interfaces pour que la classe puisse être utilisée ailleurs.

+0

Je ne veux pas de ressources globales, c'est pourquoi je ne voulais pas utiliser de statique. – BlackTea

+0

Élargi mes notes sur les options pour les objectifs non globaux. –

1

Tout d'abord, je ne pense pas que vous voulez que les propriétés de BaseCommon soient statiques. Les propriétés sont alors globales dans l'application, donc les changer d'une instance les changera pour toutes les instances.

Ce dont vous parlez, c'est de l'héritage multiple et ce n'est pas supporté par C#. Il vaudrait mieux que BaseCommon devienne une interface et que BaseContentPage et BaseUserControl implémentent cette interface.