我正在将程序连接到一些外部代码。我正在设置它,以便外部代码可以实例化对象,我遇到了一个问题。我在这里创建了这个函数:
Public Function InstanceOf(ByVal typename As String) As Object
Dim theType As Type = Type.GetType(typename)
If theType IsNot Nothing Then
Return Activator.CreateInstance(theType)
End If
Return Nothing
End Function
我正在尝试创建一个System.Diagnostics.Process
对象。尽管如此,它始终返回Nothing
而不是对象。有人知道我做错了吗?
我在VB.net中这样做,所以接受所有.net响应:)
答案 0 :(得分:1)
仔细阅读the documentation of Type.GetType()
,具体来说,请阅读以下部分:
如果 typeName 包含命名空间而不包含程序集名称,则此方法仅按顺序搜索调用对象的程序集和Mscorlib.dll。如果 typeName 使用部分或完整程序集名称完全限定,则此方法将在指定的程序集中搜索。如果程序集具有强名称,则需要完整的程序集名称。
由于System.Diagnostics.Process
位于System.dll(而非Mscorlib.dll)中,因此您需要使用完全限定名称。假设您正在使用.Net 4.0,那将是:
System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
如果您不想使用完全限定名称,则可以浏览所有已加载的程序集并尝试使用Assembly.GetType()
获取类型。
答案 1 :(得分:1)
您可以使用类似的东西来创建对象。
我定义了一个本地类,并使用了您的流程示例。
Public Class Entry
Public Shared Sub Main()
Dim theName As String
Dim t As Type = GetType(AppleTree)
theName = t.FullName
Setup.InstanceOf(theName)
t = GetType(Process)
theName = t.FullName & ", " & GetType(Process).Assembly.FullName
Setup.InstanceOf(theName)
End Sub
End Class
Public Class Setup
Shared function InstanceOf(typename As String) as object
Debug.Print(typename)
Dim theType As Type = Type.GetType(typename)
If theType IsNot Nothing Then
Dim o As Object = Activator.CreateInstance(theType)
'
Debug.Print(o.GetType.ToString)
return o
End If
return nothing
End function
End Class
Public Class AppleTree
Public Sub New()
Debug.Print("Apple Tree Created")
End Sub
End Class