VB.NET:优化多个类的初始化

VB.NET:优化多个类的初始化,vb.net,optimization,reflection,Vb.net,Optimization,Reflection,在我的一个项目中,我目前正在做: addTemplateToList(New docNULL) addTemplateToList(New docAgenda) addTemplateToList(New docAgendaNew) addTemplateToList(New docOffer) : 20 more : addTemplateToList(New docRequest) 所有类都继承docMain,addTem

在我的一个项目中,我目前正在做:

    addTemplateToList(New docNULL)
    addTemplateToList(New docAgenda)
    addTemplateToList(New docAgendaNew)
    addTemplateToList(New docOffer)
    :
      20 more
    :
    addTemplateToList(New docRequest)
所有类都继承docMain,addTemplateToList(X)将X添加到(docMain的)列表中

现在我的问题是:有没有更好的方法来完成代码示例中的工作

我想到了这样的事情:

for all x as docMain in ALLAVAILABLECLASSES
  if x.className().beginswith("doc") then addTemplateToList(x)
next

这在VB.net中是否可能(反射?)

Google vb.net反射提供:


请注意,尽管这会使您的代码更灵活/更短。这不是优化,反射通常是程序中昂贵的功能。

Google vb.net反射提供:


请注意,尽管这会使您的代码更灵活/更短。这不是优化,反射通常是程序中昂贵的功能。

您需要使用反射,更好的是使用MEF(),这样您就可以在运行时粘贴新模块,或者只需删除DLL


正如有人之前所说的那样,它不会使速度更快,但代码更灵活。

您需要使用反射,最好使用MEF(),这样您就可以在运行时粘贴新模块,或者只需删除DLL


正如有人之前所说,它不会使速度更快,但代码更灵活。

我找到了一个非常简单的解决方案:

    Dim m As Type = Type.GetType("mainARGQ.docCreator")
    For Each TypeObj As Type In [Assembly].GetExecutingAssembly().GetTypes()
        If TypeObj.BaseType Is m And TypeObj IsNot m Then
            addTemplateToList(Activator.CreateInstance(TypeObj))
        End If
    Next

编辑:只是想知道是否有办法简化“TypeObj.BaseType是m而TypeObj不是m”

我找到了一个非常简单的解决方案:

    Dim m As Type = Type.GetType("mainARGQ.docCreator")
    For Each TypeObj As Type In [Assembly].GetExecutingAssembly().GetTypes()
        If TypeObj.BaseType Is m And TypeObj IsNot m Then
            addTemplateToList(Activator.CreateInstance(TypeObj))
        End If
    Next

编辑:只是想知道是否有一种方法可以简化“TypeObj.BaseType是m而TypeObj不是m”

您是否可以检查类是否继承docMain,而不是检查类名的前缀?而且,如果每个类只有一个实例,那么它可以说是一种“代码气味”。例如,如果适当地设置了一些私有变量,DocAgendan是否可能像docAgendaNew一样工作?您是否会检查类是否继承docMain,而不是检查类名的前缀?而且,如果每个类只有一个实例,那么它可以说是一种“代码气味”。例如,如果适当地设置了一些私有变量,DocAgendan是否可能像docAgendaNew一样工作?类基类型永远不会是它自己,所以可以去掉And部分。类基类型永远不会是它自己,所以可以去掉And部分。