Forms 如何在运行时获取可用类

Forms 如何在运行时获取可用类,forms,vbscript,Forms,Vbscript,我想轮询一个类,让它返回所有可用的子类,然后以一种我可以解决它们的方式。它可以返回数组、字典或其他内容。只要我能够循环遍历它们的集合并从它们中读取属性或调用函数 情景: 我想创建一个表单,用户在其中输入一系列事件的详细信息。然后我阅读表单并输出一份报告。每种类型的事件都有一个“.Name”,但有一组不同的输入(FormOptions)和方法(FormatOutput)来创建输出。现在,这是通过一个复杂的表单和一个在用户提交表单后运行的脚本来实现的 问题是每次我向表单添加选项时,我都必须在几个不同

我想轮询一个类,让它返回所有可用的子类,然后以一种我可以解决它们的方式。它可以返回数组、字典或其他内容。只要我能够循环遍历它们的集合并从它们中读取属性或调用函数

情景: 我想创建一个表单,用户在其中输入一系列事件的详细信息。然后我阅读表单并输出一份报告。每种类型的事件都有一个“.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
课程行程
班级活动
公共属性获取名称()
Name=“会议”
端属性
公共功能表单选项(id)
Form Options=“会议选项的表单代码”
端函数
公共子格式输出(时间、标题、位置)
“做一个花哨的会议记录
端接头
末级
头等舱旅行
公共属性获取名称()
Name=“旅行”
端属性
公共功能表单选项(id)
Form Options=“旅行选项的表格代码”
端函数
公共子格式输出(开始时间、结束时间、起点、终点)
“做一个奇特的旅行记录
端接头
末级
末级
当脚本运行时,它会创建一个表单,用户可以在其中添加一系列事件。每次用户在“会议”和“旅行”之间进行选择时,都会填写该事件类型的选项。最后,他们按下一个按钮,脚本生成一个漂亮的文档,列出了用户的所有输入

在将来的某个时候,我想增加一种新的活动:住宿

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
班级住宿
公共属性获取名称()
Name=“住宿”
端属性
公共功能表单选项(id)
Form Options=“住宿选项的表格代码”
端函数
公共子格式输出(日期、位置)
“做一个漂亮的住宿入口
端接头
末级
如何设置行程类,使其自动识别新类并将其作为可用事件类型返回?我可以想出几种方法来实现这一点,但它们都涉及到将可用类的索引与实际类分开,并且我试图在添加新事件类型时尽量减少更改代码的位置


我故意不包括任何关于我如何构建表单的细节,因为在这一点上,我对任何事情都持开放态度。此外,请温和地提及“继承性”、“可扩展性”或“多态性”。我只是一个脚本编写者,这些OOP概念对我来说还是有点陌生。

我认为这是不可能的,但接近这一点的一种方法是拥有一个唯一的类名列表——最简单的方法是拥有一个全局字典

通过阅读字典的
集合,可以获得类列表

我认为VBScript不支持对类的引用,因此当用户选择其中一种类型时,将使用它创建相应类的实例

Dim ClassList
Set ClassList = CreateObject("Scripting.Dictionary")

'on type selection:
Function GetItineraryInstance(className)
    Set GetItineraryInstance = Eval("New " & className)
End Function

ClassList("Travel") = 1
Class Travel
    'methods
End Class

至少类注册可以与类定义一起保存。

这几乎是可行的。在实例化类之前,不会调用类\u Initialize。因此,所有可用的类名都必须添加到类本身之外的字典中。但是它只需要两个地方来编辑代码(其中一个地方只是添加了一个字典项)。@WebbMyers删除了
Class\u Initialize