Morfeey
@Morfeey

Использование дочернего свойства?

Скажу сразу, C# для меня чисто любительская тема, поэтому прошу сильно не пинать.
Имеем абстрактный класс:
abstract public class Bazes
    {
        abstract public string MainDirectory { get; set; }
        abstract public string MainBackUpDirectory { get; set; }
        abstract public string DirectoryLog { get; set; }
        abstract public string FileLog { get; set; }

        abstract public bool IsMaches (string item);

        public List<Baza> GetFullList() {
            List<Baza> result = new List<Baza>();
            string[] Items = Directory.GetDirectories(this.MainDirectory);
            foreach (string Item in Items) {
                result.Add(new Baza ( Item ));
            }
            return result;
        }

        public List<Baza> GetCurrentList()
        {
            List<Baza> result = new List<Baza>();
            string[] Items = Directory.GetDirectories(this.MainDirectory);

            foreach (string Item in Items) {
                if (IsMaches(Item)) {
                    result.Add( new Baza( Item ));
                }
            }

            return result;
        }

        public void Log(string text) {
            if (text != null && text != "")
            {
                Directory.CreateDirectory( DirectoryLog );
                File.AppendAllText(FileLog, DateTime.Now.ToString() + " : " + text + "\n", encoding: Encoding.UTF8);
            }
        }

        public Bazes()
        {
        }
    }

А так же несколько производных.
Суть в том, что бы использовать поля из потомка в самом абстрактном классе (т.к реализовываются они именно там).

Возможно ли это ?
Не поджидают ли меня за такую реализацию в темном переулке ?)

Нужно для использования методов общего назначения, которые и реализованы в этом абстрактном классе.

Подозреваю на что нить подобное типа: "children._construct()" в конструкторе абстракции, только вот не особо силен в синтаксисе.

P.S: Если вы готовы предложить лучшую реализацию - был бы только рад.
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 3
@cicatrix
было бы большой ошибкой думать
Вы не можете управлять потомками (совсем как в жизни).
Есть ключевое слово sealed - оно не позволяет наследовать данное свойство или метод потомкам, но это же означает, что вам необходимо реализовать его в базовом классе.
Потомок может переопределить поведение базового класса вообще полностью (правда, тогда непонятно, зачем он его наследовал, но в теории, из родителя вы ничего с этим поделать не можете).
Ответ написан
Комментировать
EreminD
@EreminD
Кое-что умею
Наследование работает только в одну сторону
Так что, если у потомка есть какое-то поле, которое нужно в родителе - переносите его
Ответ написан
Комментировать
Griboks
@Griboks Куратор тега C#
Если вы хотите, что бы свойства абстрактного класса работали со "значениями", определёнными у наследников, то просто используйте их. Поля наследованию не подлежат. Если вы хотите вызвать метод родителя, обращайтесь к base.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы