2010-11-25 5 views
3

Ist es möglich, eine abstrakte Eigenschaft haben, die eine Art in der abgeleiteten Klasse definiert zurückgibt:Abstrakte Eigenschaft mit dem Typ, der in der abgeleiteten Klasse deklariert ist?

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; } } 
} 

oder muss ich einen int zurückgeben und es in der abgeleiteten Klasse zuzuordnen. Andere Vorschläge sind willkommen.

+1

nie vergessen addiere override Schlüsselwort, sonst public e_Type type {get {return _type; }} ist die Deklaration einer neuen Eigenschaft, die die Basiseigenschaft versteckt. –

Antwort

5

Sicher können Sie:

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; } } 
} 

Sie brauchen noch nicht einmal als abstrakt zu deklarieren:

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

die Sie dann als verwenden:

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

Ihre konkrete 'BaseClass' ist nicht gültig, da sie die Eigenschaft nicht implementiert. –

5

Nun, Sie können den Typ explizit angeben - aber es muss ein Typ sein, nicht nur "eine namens e_Type in der konkreten Unterklasse deklariert".

Oder man könnte es ein generischer Typ, natürlich machen, wie folgt aus:

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; } } 
} 

Ohne zu wissen, was Sie erreichen wollen, ist es schwer, ein geeignetes Design vorschlagen.

Verwandte Themen