2014-11-14 4 views
0

В моем текущем проекте, программе рисования схем, я получаю много классов из одного базового класса.Создание нескольких классов

Public MustInherit Class clsCompo 

Public Class clsRelay Inherits clsCompo 
Public Class clsResistor Inherits clsCompo 

Каждый дочерний класс имеет функцию getIcon, которая обеспечивает желаемое изображение компонента. Они загружаются в список, который будет использоваться в программе рисования.

Есть ли простой способ создания экземпляров этих классов для использования? Есть ли другой способ, чем создание экземпляров каждого класса вручную? А затем добавить изображение в ListView: что-то вроде:

Dim classes() As String = {"clsResistor", "clsRelay"} 
    Dim c(1) As Object 

    For Each cls As String In classes 
     c(1) = New cls 
     'add image to listview 
    Next 

Я использую .NET 3.5

Благодаря

ответ

4

Если ваши классы имеют конструктор без параметров:

c(1) = Activator.CreateInstance(Type.GetType("MyNamespace." & cls)) 

Очевидно, что MyNamespace. следует заменить соответствующим образом.

+0

Вы также можете указать [GetType] (http://msdn.microsoft.com/en-us/library/system.object.gettype (v = vs.110) .aspx). – Neolisk

+1

@Neolisk: Спасибо, я переключился на другую перегрузку CreateInstance, которая использует GetType. – Heinzi

+1

Спасибо, теперь мне нравится давать +1. :) – Neolisk

0

Для выполнения этого трюка вам необходимо использовать отражение и активатор.CreateInstance. Движение к пути отражения опасно и обычно приносит больше проблем, чем дает преимущества. В большинстве случаев лучше разработать приложение.

В вашем конкретном случае у вас может быть словарь значков, совпадение строки с символом, а затем просто есть конструктор clsCompo, который указывает значок, который вы хотите в качестве параметра. Если вы не используете наследование для чего-то другого, это должно полностью решить вашу проблему, без бремени использования рефлексии.

Смежные вопросы