2010-11-25 4 views
3

Est-il possible d'avoir une propriété abstraite qui retourne un type défini dans la classe dérivée:Propriété abstraite avec le type déclaré dans la classe dérivée?

abstract class baseClass 
{ 
    public abstract e_Type type { get; } 
} 

class derived : baseClass 
{ 
    public enum e_Type 
    { 
     type1, 
     type2 
    } 

    private e_Type _type; 
    public e_Type type { get { return _type; } } 
} 

ou dois-je retourner un entier et la carte dans la classe dérivée. Toutes les autres suggestions sont les bienvenues.

+1

ne jamais oublier de ajouter un mot clé override, sinon public type e_Type {get {return _type; }} est la déclaration de la nouvelle propriété, cachant la propriété de base. –

Répondre

5

Bien sûr, vous pouvez:

abstract class BaseClass<T> 
{ 
    public abstract T Type { get; } 
} 

class Derived : BaseClass<EType> 
{  
    public enum EType 
    { 
     type1, 
     type2 
    } 

    private EType _type; 
    public override EType Type { get { return _type; } } 
} 

Vous ne devez même pas déclarer comme abstraite:

class BaseClass<T> { 
    private T _type; 
    public T Type { get { return _type; } } 
} 

que vous pouvez ensuite utiliser comme:

BaseClass<EType> classInst = new BaseClass<EType>(); 
+0

Votre 'BaseClass' concret n'est pas valide, car il n'implémente pas la propriété. –

5

Eh bien, vous pouvez spécifier le type explicitement - mais il doit être un type, pas seulement "un appelé e_Type déclaré dans la sous-classe concrète".

Ou vous pouvez faire un type générique, bien sûr, comme ceci:

public abstract class BaseClass<T> 
{ 
    public abstract T Type { get; } 
} 

public class Derived : BaseClass<EType> 
{ 
    public enum EType 
    { 
     ... 
    } 

    private EType type; 
    public EType Type { get { return type; } } 
} 

Sans savoir ce que vous essayez d'atteindre, il est difficile de proposer une conception appropriée.

Questions connexes