2016-02-26 2 views
1

Извините, я не знаю, как написать свою проблему в пару слов, так что я не мог даже правильно ее перевести.Наследование унаследованного абстрактного класса с реализацией

вещь есть: у меня есть цепочка абстрактных классов.

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)?

Я не понимаю, как сделать эту архитектуру без абстрактных классов, но я не хочу писать 7 extraproperties с базой return.PropName; в каждом неабстрактном классе :(

интерфейс не будет работать, потому что мне нужно использовать поле. (это единство)

+3

Пожалуйста, покажите пример кода. – nodots

+0

Просто сделайте свойства абстрактных классов не абстрактными. «абстрактное» означает «должно быть реализовано конкретными подклассами», чего вы не пытаетесь достичь. –

+0

Вы все равно можете использовать виртуальные свойства и переопределить их, когда вам нужно. – CarbineCoder

ответ

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; } 
    } 
} 
+0

Да, это схема. Благодарю. Перезагрузка спасла меня) – Poryadok

0

Ваши вопросы не ясны, поэтому я просто покажу вам, как объявить трехуровневую иерархию.

  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. A Non производный класс реализует оставшиеся абстрактные свойства (только PropertyHero, не PropertyEntity)

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