我想轮询一个类并让它返回所有可用的子类,然后我可以解决它们。它可以返回一个数组、一个字典或其他东西。只要我可以遍历它们的集合并从中读取属性或调用函数。
场景:我想创建一个表单,用户可以在其中输入一系列事件的详细信息。然后我阅读表格并输出报告。每种事件都有一个“.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
如何设置我的行程类,以便它自动识别新类并将其作为可用事件类型返回?我可以想到几种方法来做到这一点,但它们都涉及将可用类的索引与实际类分开,并且我试图在添加新事件类型时尽量减少必须更改代码的地方的数量。
我故意不包括有关如何构建表单的任何细节,因为此时我对任何事情都持开放态度。此外,请谨慎对待“继承”、“可扩展性”或“多态性”的引用。我只是一个脚本编写者,这些 OOP 概念对我来说仍然有点陌生。