在派生类中声明的类型的抽象属性?

时间:2010-11-25 17:44:18

标签: c# abstract-class

是否可以使用一个抽象属性来返回派生类中定义的类型:

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 个答案:

答案 0 :(得分:5)

嗯,您可以明确指定类型 - 但它必须是 a 类型,而不仅仅是“在具体子类中声明的一个名为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; } }
}

如果不知道自己想要达到的目标,就很难建议合适的设计。

答案 1 :(得分: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>();