2009-09-26 5 views
1

je code suivant:Comment remplacer le type d'un membre de la classe abstraite en classe enfant

public abstract class TestProperty 
{ 
    public abstract Object PropertyValue { get; set; } 
} 

public class StringProperty: TestProperty 
{ 
    public override string PropertyValue {get;set} 
} 

qui génère une erreur de compilation, je me demande ce que je devrais utiliser le type générique TestProperty pour achive mon objectif d'avoir un type différent du même nom dans la classe enfant?

Répondre

6

Oui, C# ne prend pas en charge les types de retour covariant. Vous pouvez en effet utiliser les médicaments génériques ici:

public abstract class TestProperty<T> 
{ 
    public abstract T PropertyValue { get; set; } 
} 

public class StringProperty : TestProperty<string> 
{ 
} 

Il n'y a pas besoin de passer outre à ce stade - et même à moins que vous allez faire quoi que ce soit d'autre, vous pourriez aussi bien se débarrasser de StringProperty entièrement et il suffit d'utiliser TestProperty<string>.

Questions connexes