Абстрактное свойство с типом, объявленным в производном классе? - PullRequest
3 голосов
/ 25 ноября 2010

Возможно ли иметь абстрактное свойство, которое возвращает тип, определенный в производном классе:

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 и отобразить его в производном классе. Любые другие предложения приветствуются.

Ответы [ 2 ]

5 голосов
/ 25 ноября 2010

Конечно, вы можете:

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>();
5 голосов
/ 25 ноября 2010

Ну, вы можете указать тип явно - но это должен быть тип , а не просто "один с именем 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; } }
}

Не зная, чего вы пытаетесь достичь, трудно предложить подходящий дизайн.*

...