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

Pat*_*ick 3 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; } }
}
Run Code Online (Sandbox Code Playgroud)

或者我必须返回一个int并将其映射到派生类中.欢迎任何其他建议.

Jon*_*eet 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; } }
}
Run Code Online (Sandbox Code Playgroud)

如果不知道你想要实现什么,就很难建议一个合适的设计.


the*_*oop 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; } }
}
Run Code Online (Sandbox Code Playgroud)

您甚至不需要将其声明为抽象:

class BaseClass<T> {
    private T _type;
    public T Type { get { return _type; } }
}
Run Code Online (Sandbox Code Playgroud)

您可以将其用作:

BaseClass<EType> classInst = new BaseClass<EType>();
Run Code Online (Sandbox Code Playgroud)