vb.net - агрегация объектов унаследованных классов

Я играю с композицией из нескольких объектов.

У меня есть два класса (Примечание и задача). Класс Task является производным от класса Note, поскольку задача представляет собой расширенную заметку.

Каждая заметка имеет свойство Property Child as list (of note) как заметка или задача может быть добавлена ​​к существующей заметке или задаче (поэтому эта "дочерняя" заметка может быть задачей или заметкой)

то есть.

dim x as new note()

x.Child.item(0).Child.item(0).Child.item(0).description.ToString()

последний дочерний объект заметки на самом деле является задачей, как я могу заставить эту агрегацию работать? Мне все равно, если это примечание или задача, но я хотел бы выпустить функциональность базового или расширенного класса.

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

У кого-нибудь есть мысли по этому поводу?

2 ответа

Решение

Ваша коллекция объектов Note уже должна дать вам то, что вы хотите.

Если вам нужно провести различие между "Заметкой" и "Задачей", вы можете спросить, является ли экземпляр задачей "typeof", а затем соответствующим образом привести ее к полученным свойствам и методам.

Если необходимые вам методы и свойства являются частью базового класса, вам не нужно приводить данные, вы можете положиться на полиморфизм, чтобы вызвать соответствующий типу метод / свойство.

Если я вас правильно понимаю, вы должны реализовывать поведение вашего класса с помощью того, что мы, люди C#, называем виртуальными методами / свойствами... По сути, они используют вызовы с поздним связыванием, так что соответствующая функциональность вызывается из правильного класса - будь то родительский класс или производный класс.

Я думаю, что VB.Net эквивалентен "Overrideable" и "Overrides".

Другие вопросы по тегам