2012-02-03 35 views
0

私のプログラムを外部コードに接続しています。私はそれを設定しているので、外部コードがオブジェクトをインスタンス化することができ、私は問題に遭遇しました。私はここで、この関数を作成しました:名前に関連付けられたオブジェクトを返します

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の応答が認められている:)

答えて

1

the documentation of Type.GetType()を通じて慎重に読んで、具体的には、この部分:型名は、名前空間が含まれて

場合が、アセンブリ名ではなく、呼び出し元オブジェクトのアセンブリと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()を使用して型を取得しようとすることができます。

+0

すべての名前の完全修飾名はどのようにして確認できますか? (つまり、どのようにその名前を思いついたのですか?) – FreeSnow

+1

タイプにアクセスできる場合は、 'typeof(Process).AssemblyQualifiedName'のようなものが戻ります。 – svick

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 
関連する問題