2012-02-03 2 views
0

내 프로그램을 외부 코드에 연결하고 있습니다. 나는 외부 코드가 인스턴스 객체가 될 수 있도록 문제를 발생 시켰습니다. 여기이 함수를 만들었습니다 : 나는 System.Diagnostics.Process 개체를 만들려고 해요이름과 관련된 객체를 반환하십시오.

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 

. 그러나 무엇보다도 이유는 무엇보다 객체 대신 항상 Nothing을 반환합니다. 아무도 내가 뭘 잘못하고 있는지 알아?

내가 VB.net에서이 일을하고있어이 때문에 모든 .NET 응답이 허용됩니다 :)

답변

1

the documentation of Type.GetType()을 통해주의 깊게 읽고, 특히이 부분 : TYPENAME 네임 스페이스를 포함

경우 만 어셈블리 이름이 아닌 경우이 메서드는 호출하는 개체의 어셈블리와 Mscorlib.dll 만 순서대로 검색합니다. 형식 이름이 부분 또는 전체 어셈블리 이름으로 정규화 된 경우이 메서드는 지정된 어셈블리를 검색합니다. 어셈블리의 이름이 정확하면 전체 어셈블리 이름이 필요합니다.

System.Diagnostics.Process은 System.dll (Mscorlib.dll 아님)에 있으므로 정규화 된 이름을 사용해야합니다. 당신은 닷넷 4.0을 사용하는 가정하면, 그는 다음과 같습니다 당신이 완전한 이름으로 일을하지 않으려면, 당신은 모든로드 된 어셈블리를 통해 이동 Assembly.GetType()를 사용하여 유형을 얻기 위해 시도 할 수

System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 

.

+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 
관련 문제