基本上,在这段代码中,x总是没有......
dim x as new object
x = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("MyCode.MyClass")
实际上,我真正想做的事情,最终是......(将x设置为MyCode.MyClass类的实例)......
dim x as new MyCode.MyClass
你知道第一组代码的问题是什么吗?
我知道你在想什么。 "为什么不采取第二种方式呢?"是的,那会更容易。但是,现在有一点背景:我们的asp.net网络应用程序中有相当复杂的业务规则,客户要求等等。但是,基本上,在我们的一个数据库表中有一个字段,它定义了变量的当前数据类型/类。该字段是一个字符串。因此,使用此字符串,并给出各种业务规则,我需要 动态 将我的变量x定义/实例化为某个类。在上面的示例" MyCode.MyClass"是字段中的字符串。因此,x对象需要是此类的实例。有时x将是" MyCode.MyClass"的实例,有时是" MyCode.AnotherClass"等的实例....
是否有比我上面编码更好的解决方案?
我也试过这个,这会产生错误...
Dim x As Object = System.Activator.CreateInstance(System.Reflection.Assembly.GetExecutingAssembly().FullName, "MyCode.MyClass").Unwrap()
对不起,这太复杂了。
更新1 :我越来越近了。当我尝试这个代码时,o和x打印出来并且看起来正确。
o = System.Activator.CreateInstance("MyCode", "MyCode.MyClass").Unwrap
Debug.Print(o.GetType.FullName)
Dim x As New MyCode.MyClass
Debug.Print(x.GetType.FullName)
但是,当我做一个x后跟"。" (获得intellisense)所出现的内容与o后跟"不同。"。有什么想法吗?当我这样做时,属性看起来是一样的......
' print out properties for each object
Dim info() As PropertyInfo = o.GetType().GetProperties()
Debug.Print(info.Length.ToString)
Dim info2() As PropertyInfo = x.GetType().GetProperties()
Debug.Print(info2.Length.ToString)
我认为这可能是因为在这个例子中o是迟到的。 Option strict目前正在进行中。我在想这个是正确的吗?如果是这样,反正这个呢?