Я хотел бы опросить класс и вернуть его всем доступным подклассам таким образом, чтобы я мог их обработать. Он может возвращать массив, словарь или что-то еще. Пока я могу прокрутить их набор и прочитать свойства или вызвать функции от каждого.Как получить доступные классы во время выполнения
Сценарий: Я хочу создать форму, в которой пользователь вводит детали последовательности событий. Затем я прочитал форму и вывел отчет. Каждый вид события имеет «.Name», но другой набор входов (FormOptions) и методов (FormatOutput) для создания вывода. Сейчас это реализовано с помощью сложной формы и скрипта, который запускается после отправки пользователем формы.
Проблема в том, что каждый раз, когда я добавляю опцию в форму, мне нужно изменить код в нескольких разных местах. В интересах упрощения моего кода, я хотел бы содержать весь код для каждого типа события в классе, а затем создавать форму на основе доступных классов.
Так как пример, я строй маршрута из коллекции собрания и путешествия объектов:
Class Itinerary
Class Event
Public Property Get Name()
Name = "Meeting"
End Property
Public Function FormOptions(id)
Form Options = "<div id="& id &">form code for Meeting options</div>"
End Function
Public Sub FormatOutput(Time, Title, Location)
'Make a fancy meeting entry
End Sub
End Class
Class Travel
Public Property Get Name()
Name = "Travel"
End Property
Public Function FormOptions(id)
Form Options = "<div id="& id &">form code for Travel options</div>"
End Function
Public Sub FormatOutput(StartTime, EndTime, Origin, Destination)
'Make a fancy travel entry
End Sub
End Class
End Class
Когда скрипт запускается он создает форму, где пользователь может добавить ряд событий. Каждый раз, когда пользователь выбирает между «Встреча» и «Путешествовать», он заполняет опции для этого типа события. В конце они нажимают кнопку, и скрипт делает довольно документальный список всех входов пользователя.
В какой-то момент в будущем я хочу добавить новый вид мероприятия: проживание.
Class Lodging
Public Property Get Name()
Name = "Lodging"
End Property
Public Function FormOptions(id)
Form Options = "<div id="& id &">form code for Lodging options</div>"
End Function
Public Sub FormatOutput(Date, Location)
'Make a fancy Lodging entry
End Sub
End Class
Как настроить свой маршрут класс так, чтобы он автоматически распознает новый класс и может вернуть его в качестве доступного типа события? Я могу придумать несколько способов сделать это, но все они включают в себя сохранение индекса доступных классов отдельно от реальных классов, и я пытаюсь свести к минимуму количество мест, которые мне нужно изменить, когда я добавляю новые типы событий.
Я очень намеренно не включаю никаких подробностей о том, как я создаю форму, так как на данный момент я открыт для чего-либо. Кроме того, будьте осторожны со ссылками на «наследование», «расширяемость» или «полиморфизм». Я просто сценарист, и эти концепции ООП по-прежнему немного чужды мне.
Это почти работает. Class_Initialize не вызывается до тех пор, пока не будет создан экземпляр класса AFTER. Таким образом, все доступные имена классов должны быть добавлены в словарь вне самих классов. Но это позволяет получить всего два места для редактирования кода (и один просто добавляет элемент словаря). –
@WebbMyers Удалено 'Class_Initialize' –