2010-11-25 20 views
3

派生クラスで定義された型を返す抽象プロパティを持つことは可能ですか?派生クラスで宣言された型の抽象プロパティ?

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

またはintを返し、派生クラスにマップする必要があります。他の提案は大歓迎です。

+1

はに決して忘れませんオーバーライドキーワードを追加します。それ以外の場合はpublicです。e_Type type {get {return _type; }}は、基本プロパティを隠す新しいプロパティの宣言です。 –

答えて

5

確かにすることができます:

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

あなたも、抽象としてそれを宣言する必要はありません:

あなたはその後、として使用することができます
class BaseClass<T> { 
    private T _type; 
    public T Type { get { return _type; } } 
} 

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

具体的な 'BaseClass'は、プロパティを実装していないため無効です。 –

5

タイプを明示的に指定できますが、具体的なサブクラスで宣言されたe_Typeというだけでなく、タイプでなければなりません。

それとも、このように、当然のことながら、そのジェネリック型にすることができます:あなたが達成しようとしているもの知らず

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

、それは適切な設計を提案するのは難しいです。

関連する問題