代码之家  ›  专栏  ›  技术社区  ›  Ole Albers

派生Abstact属性

  •  0
  • Ole Albers  · 技术社区  · 6 年前

    我有一个具有抽象属性的基类:

    public class BottomClass {
      public abstract string Name {get;set;}
    }
    

    我现在有了一个类,它派生自:

    public class MiddleClass:BottomClass {
      public override string Name {get;set;}
    }
    

    我现在想要的是“中间类”本身将该属性定义为抽象的,这样从中派生的类将被强制实现该属性。以下代码是 以这种方式工作:

    public class MiddleClass:BottomClass {
      public abstract override string Name {get;set;} // Not possible that way
    }
    
    public class TopClass:MiddleClass {
      public override string Name {get;set;} ="tothetop";
    }
    

    有没有办法达到我想要的?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Aluminium    6 年前

    如果将属性定义为抽象的,则必须在一些非抽象类中实现它。所以在这两个类中拥有属性的唯一可能方法是

    public abstract class BottomClass
    {
        public abstract string NameB { get; set; }
    }
    
    public abstract class MiddleClass : BottomClass
    {
        public abstract string NameM { get; set; } 
    }
    
    public class TopClass : MiddleClass {
        public override string NameB { get; set; }
        public override string NameM { get; set; }
    }
    

    据我所知,你的目的是要在中产阶级拥有‘名字’财产。

    或者不要实现它,正如达米安在上面评论的那样。

        2
  •  1
  •   shingo    6 年前

    如果您有理由不将类抽象化,则抛出异常。

    public class MiddleClass:BottomClass
    {
        public override string Name
        {
            get => throw new NotImplementedException();
            set => throw new NotImplementedException();
        }
    }