继承抽象类的继承与实现

时间:2016-02-26 16:53:47

标签: c# oop inheritance abstract

抱歉,我不知道如何用几个字来写我的问题,所以我甚至无法正确地谷歌。

事情是:我有抽象类链。

 AbEntity with abstract properties.

    AbHero and AbEnemy with realization of AbEntity's properties and with it's own abstract properties

        Non-abstract classes.

由于某种原因,非抽象类应该实现AbEntity的抽象属性。他们为什么不能从父母那里接受它(AbHero& AbEnemy)?

我不明白如何在没有抽象类的情况下构建这个架构,但我不想用return base.PropName编写7个额外的属性。在每个非抽象类中:(

接口无法工作,因为我需要使用字段。 (这是统一的)

2 个答案:

答案 0 :(得分:0)

  

由于某些原因,非抽象类应该实现AbEntity的抽象属性。

这不是真的,如果他们继承了abHero并且abHero已经实现了抽象的AbEntity属性,那么就不需要再次实现它们了,看看这个例子:

public abstract class a
{
    public abstract int value{ get; }
}

public abstract class b : a
{
    public abstract int valueb { get; }
    public override int value
    {
        get { return 1; }
    }
}

public class c : b
{
    public override int valueb
    {
        get { return 2; }
    }
}

答案 1 :(得分:0)

您的问题并不清楚,所以我只是告诉您如何声明3级层次结构。

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

    abstract class AbEntity
    {
        public abstract int PropertyEntity { get; }
    }
    
  2. 派生的仍然抽象的类,其实现为PropertyEntity,并添加了另一个抽象属性。

    abstract class AbHero : AbEntity
    {
        public override int PropertyEntity { get { /* ... */ } }
    
        public abstract string PropertyHero { get; }
    }
    
  3. 实现剩余抽象属性的非派生类(仅PropertyHero,而非PropertyEntity

    class NonAbstractHero : AbHero
    {
        public override string PropertyHero { get { /* ... */ } }
    }