Есть ли лучший способ вызвать метод каждого производного объекта для базового класса?

У меня есть базовый класс, из которого я вывожу несколько классов. У меня есть другой класс, который использует все эти производные классы по-другому. Однако я хочу вызвать метод Update() (унаследованный от базового класса) для каждого производного класса. Есть ли простой способ сделать это, или мне нужно сделать что-то вроде:

dim a As Derived1
a.Update

dim b As Derived2
b.Update

etc...

person Jason    schedule 26.08.2009    source источник


Ответы (2)


Я думаю, что лучший способ сделать это — сохранить производные объекты в каком-то списке, а затем выполнить итерацию по ним, чтобы вызвать Update.

В псевдокоде:

foreach BaseClass item in {a, b, ...}:
    item.Update
person recursive    schedule 26.08.2009

Вы можете сделать это с помощью полиморфизма с вызовом функции, передающим базовый класс (псевдокод):

Dim Dev1 as Derived1 '// This is derived from the class BaseClass
Dim Dev2 as Derived2 '// This is derived from the class BaseClass

CallUpdate(Dev1)
CallUpdate(Dev2)

Function CallUpdate(BaseClass bc)
    bc.Update()
End Function
person CAbbott    schedule 26.08.2009
comment
Вы просто обмениваете .Update на CallUpdate. Какая польза? - person recursive; 27.08.2009
comment
Я абстрагировал функциональность BaseClass через вызов функции. Я прочитал OP как вопрос, есть ли способ вызвать функциональность BaseClass обычным способом. - person CAbbott; 27.08.2009
comment
нет, я знаю, как это сделать, поэтому утверждаю, что метод Update унаследован. Мне нужен способ одновременного вызова метода Update всех производных классов. - person Jason; 27.08.2009
comment
@Jason - тогда тебе нужен рекурсивный ответ. :) - person CAbbott; 27.08.2009