【问题标题】:A list of modules or classes ( in VB 2010 Express)模块或类的列表(在 VB 2010 Express 中)
【发布时间】:2013-07-08 20:37:05
【问题描述】:

我有一组模块,例如 itemOne、itemTwo、...、itemTen,它们内部有类似的方法和子类。我使用“Delegate”和“Enum”来跟踪这些方法,并有系统地在 for 循环中调用它们。但是,我不确定如何制作模块的集合或数组,以便能够遍历它们。

下面的最终目标,伪代码

For Num = One to Ten
     With item<Num> % This could be itemOne, or itemTwo, etc. I do NOT know how to do this
          % Call function with the help of for loops. I know how to do this
     End With
End For

如果有一种方法可以使用字符串数组,并在运行时将它们作为代码执行,那将会有所帮助。类似于 -- 调用 String2Code("ItemOne").Something.SomeMethod(),其中 SomeMethod 是一个子例程。

它不一定是 String2Code 类型的实现。一般来说,我正在寻找一种方法来跟踪一组“模块代表”。当然,“Delegate”只适用于 VB 中的 Sub/Function,我一直无法找到以类似方式处理模块的技术。如果这些模块的地址指针存储在一个数组中,我应该可以遍历它们。

如有任何建议,我将不胜感激。谢谢。

【问题讨论】:

标签: vb.net


【解决方案1】:

回想起来,这可能更简单。在我看来,你应该让它们成为类而不是模块......

请注意,我在下面使用了一、二和三来表示您不同类型的对象。

Dim col as List(Of Object)
col.add(One)
col.add(Two)
col.add(Three)
For i as integer = 0 to col.Count -1
    If typeof col(i) is [ModuleType1] Then
       CTYPE(col(i), ModuleType1).SubClass.Method()
    Else If TypeOf col(i) is ModuleType2 Then
       CTYPE(col(i), ModuleType2.SubClass2.Method2()
    End If
Next

或者,您可以将 col 设为对象数组。

Dim col() as Object = {One, Two, Three}

理想情况下,您应该避免使用 Object,而您的所有模块都将使用继承将类似的方法组合在一起。它们而不是 Object,您可以使用 ParentObject 来保持类似的功能,而不是一直进行强制转换。

这像泥一样清澈吗?

史蒂夫

【讨论】:

    猜你喜欢
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多