2014-11-14 53 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 2014-11-14 17:09:48

+1

@Neilisk:謝謝,我已經切換到使用GetType的不同CreateInstance重載。 – Heinzi 2014-11-14 17:10:31

+1

謝謝,現在我想給+1。 :) – Neolisk 2014-11-14 17:11:10

0

您將需要專門使用reflection和Activator.CreateInstance來執行這個技巧。走向反射路徑是危險的,通常會帶來更多的麻煩,而不是它帶來的好處。在大多數情況下,有更好的方法來設計你的應用程序。

你的具體情況,你可以有圖標的字典,字符串,圖標相匹配,則只是有clsCompo的構造函數指定要作爲參數的圖標。除非你使用其他的繼承,否則這應該完全解決你的問題,沒有使用反射的負擔。