2009-08-04 10 views
1

J'ai une méthode dans une classe de basechamp appartient à une classe, mais comment utiliser le polymorphisme

class Base 
{ 
    private static string Colour = "blue"; 
    string DoStuff() { return ColourProp; } 

    protected virtual string ColourProp { get{ return Base.Colour; } } 
} 

qui est appelé une instance de cette sous-classe

class Sub 
{ 
    private static string Colour = "orange"; 

    protected override string ColourProp { get{ return Sub.Colour; } } 
} 

Au moment je m en utilisant des propriétés virtuelles, est-ce le seul moyen? (Considérant que les champs ne peuvent pas être virtuels) ...

Répondre

2

Oui, vous devez utiliser une propriété virtuelle ou une méthode virtuelle pour cela. Le CLR répartira de manière dynamique tous les appels à ColourProp en fonction du type de l'objet (polymorphisme).

+0

ouais c'est bien, mais je me demandais juste puisque idéalement (pour mon problème) les champs Couleur appartiennent à la classe et non l'instance ... peut-être que je peux utiliser la réflexion ou quelque chose pour appeler le type dynamiquement ??? – geejay

+0

Ils peuvent appartenir à la classe, mais vous ne pouvez pas faire de polymorphisme sur les membres statiques, et non, en utilisant la réflexion pour le faire constitue une "odeur". Peut-être pourriez-vous prendre du recul et décrire ce que vous essayez d'atteindre à un niveau supérieur? –

+0

Ok, j'admets que c'est exagéré et malodorant. Je me demande simplement s'il existe un moyen d'obtenir un comportement de type polymorphisme avec des variables de classe (essentiellement pour couper cette propriété supplémentaire de chaque sous-classe, donc tout ce que j'ai à faire est de définir un champ, puis c'est utilisé par la superclasse). – geejay

0

Cela semble très bien. Ne vous inquiétez pas des propriétés virtuelles. Ceci fournit non seulement une encapsulation de vos données contre d'autres objets mais aussi contre des sous-classes.

Questions connexes