2017-04-17 78 views
0

幾年前在VB.NET訪問create-class-dynamically-at-runtime創建動態創建類的實例,並

其性能已經解釋瞭如何動態創建使用CreateClass函數的類。函數工作正常,我成功地枚舉了新創建的類的屬性。

我知道我可以使用

 Dim varNewType = CreateClass("clsTest2", TypeDict) 
    Dim NewVar = Activator.CreateInstance(varNewType) 

但是,我沒有我知道如何訪問它的屬性確實創造了新創建的類的單一實例,如何設置他們或得到他們的價值觀。

此外,我需要創建這個新創建類型的列表。所以請,如果有人有任何想法,請分享。

在此先感謝。

+0

您將使用反射來訪問成員,如果是屬性,則使用它們的值。 – jmcilhinney

+0

嗨jmcilhinney,我意識到這一點,但我不知道如何做到這一點。如果你只需要放幾行代碼,那麼我就會知道我必須使用Reflection的對象和方法。另外,如果你有任何想法如何實例化新列表(新類型),我會非常感激。 –

+0

您需要先對Reflection進行自己的研究。嘗試你認爲是必需的,然後,如果它不起作用,發佈你有什麼,並告訴我們發生了什麼。 – jmcilhinney

回答

0

由於您使用的是VB代碼,因此它很容易直接訪問方法和屬性。

例如爲:

Dim varNewType = CreateClass("clsTest2", TypeDict) 
Dim NewVar as object = Activator.CreateInstance(varNewType) 

然後,在情況下,它有一個方法METH1和財產PROP1,你可以做以下幾部件:

NewVar.Meth1(any params...) 
Dim obj as object = NewVar.Prop1 

無需反射或鑄造!

+0

嗨Abusnake, 感謝您在週末的答覆。 但是,您的解決方案在此不起作用;這不是我不記得嘗試自己的事情。 如果您打開了我提供的鏈接,您會看到由比我更聰明的人創建的函數實際上會在運行時動態創建新類型。在設計時,該類型的實例變量實際上是類型對象。在設計時你無法通過VS訪問任何屬性,因爲那時它們還沒有創建。 我需要知道如何訪問這些屬性,以及如何創建該類型的列表。 –

+0

在設計時間surly將無法正常工作。這將在運行時工作。對於設計時,您需要在Visual Studio中添加對該組件的引用。 參考文獻 - >添加參考 – Abusnake

+0

@IvicaNesic,您需要關閉Option Strict Off,然後您可以使用後期綁定,這可以讓您在不知道運行時是否存在的情況下引用任何成員。如果它在運行時確實存在,那麼它將工作,如果它不存在,則會拋出異常。事情是,在設計時你仍然需要知道成員的名字。你知道這些名字嗎?反思不僅可以讓你調用成員,還可以讓你發現它們,在後期綁定需要你知道它們會存在。 – jmcilhinney