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