0

我有以下代码来根据类名创建我的一个类的实例。

'Get a System.Type corresponding to the name of the parent class  
Dim tt As Type = Type.GetType(item.ParentClass)
'Create an instance of the specified type using the types default constructor
Dim theObject As Object = Activator.CreateInstance(tt)

如果我有完整的课程,这很好用,MainClassName.Namespace.ClassName 但如果我尝试用 just 来做到这一点,就ClassName等于 tt没有。

有没有办法使用ClassName和获取完全限定名称,如MainClassName.Namespace.ClassName

4

2 回答 2

0

您需要使用Type.AssemblyQualifiedName,如下所示:

'part 1 of your code - store class name in a universal format
Dim className As String = GetType(item.ParentClass).AssemblyQualifiedName

'part 2 of your code - use a previously stored class name to create instance
Dim tt As Type = Type.GetType(className)
Dim theObject As Object = Activator.CreateInstance(tt)

归功于 SO 上的这个答案

于 2013-04-16T20:36:02.610 回答
0

有没有办法使用ClassName和获取完全限定名称,如MainClassName.Namespace.ClassName

不,这在逻辑上是行不通的。考虑以下情况:您有两个类,Foo.X并且Bar.X. 因此,仅指定X是模棱两可的。事实上,这首先是命名空间和完全限定名称背后的动机。

即使有可能(例如通过返回候选类型列表),这也是不切实际的,因为它需要运行时遍历所有引用程序集加载的整个类列表。这可能是一个巨大的数字,即使只加载了基本框架。GetType效率会非常低。

于 2013-04-16T20:56:48.307 回答