代码之家  ›  专栏  ›  技术社区  ›  Patrick

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

  •  3
  • Patrick  · 技术社区  · 15 年前

    是否可以有一个抽象属性,该属性返回在派生类中定义的类型:

    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 回复  |  直到 15 年前
        1
  •  5
  •   thecoop    15 年前

    当然可以:

    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>();
    
        2
  •  5
  •   Jon Skeet    15 年前

    好吧,您可以显式地指定类型-但必须是 类型,而不仅仅是“一个在具体子类中声明的称为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; } }
    }
    

    如果不知道你想达到什么目标,很难提出一个合适的设计。