VB.NET: оптимизировать инициализацию нескольких классов - PullRequest
1 голос
/ 16 июля 2009

В моем проекте я сейчас занимаюсь этим:

    addTemplateToList(New docNULL)
    addTemplateToList(New docAgenda)
    addTemplateToList(New docAgendaNew)
    addTemplateToList(New docOffer)
    :
      20 more
    :
    addTemplateToList(New docRequest)

все классы наследуют docMain, а addTemplateToList (X) добавляет x в список (Of docMain).

Теперь мой вопрос: есть ли лучший способ сделать то, что сделано в примере кода?

Я думал о чем-то вроде:

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

Возможно ли это как-то в VB.net (Reflection?)?

Ответы [ 3 ]

1 голос
/ 16 июля 2009

Я нашел довольно простое решение моей проблемы:

    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 Is m и TypeObj IsNot m"

0 голосов
/ 16 июля 2009

Вам нужно использовать отражение, еще лучше использовать MEF (http://www.codeplex.com/MEF), чтобы вы могли прикреплять новые модули во время выполнения или просто удаляя DLL.

Как кто-то сказал ранее, это не сделает его быстрее, но меньше кода, больше гибкости.

0 голосов
/ 16 июля 2009

Google vb.net дает отражение:

http://www.vbdotnetheaven.com/UploadFile/rahul4_saxena/Reflection09122007031247AM/Reflection.aspx

Обратите внимание, что, хотя это сделает ваш код более гибким / коротким. Это не оптимизация, отражение - это, как правило, дорогая функция в программах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...