2013-11-14 47 views
1

主要類....C#Activator.CreateInstance錯誤

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1{ 
    class Program{ 
     static void Main(string[] args){ 
      string className = "Demo"; 
      string namespaceName = "ConsoleApplication1"; 
      var myObj = Activator.CreateInstance(namespaceName, className); 
      Console.Read(); 
     } 
    } 
} 

其他類....

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1{ 
    class Demo{ 
     public void printClassName() { 
      Console.WriteLine("Demo"); 
     } 
    } 
} 

這個簡單的程序具有

var myObj = Activator.CreateInstance(namespaceName, className);線運行時錯誤。

System.TypeLoadException {"Could not load type 'Demo' from assembly 'ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.":"Demo"} 

請幫我解決這個錯誤!

回答

4

Activator.CreateInstance(string, string)不符合您的想法。

第一個參數是組件名稱。第二個參數是完全合格的類型名稱。

所以,你應該有:

string className = "ConsoleApplication1.Demo"; 
string assemblyName = "ConsoleApplication1"; 
var myObj = Activator.CreateInstance(assemblyName, className); 

(假設它編譯成稱爲當然ConsoleApplication1組件。)

如果你能得到一個句柄Assembly以不同的方式,但是,您可以使用Assembly.GetType(string),然後使用Activator.CreateInstance(Type)

+0

我看到你在網上談論性能的地方..你可以在這裏用Activator.CreateInstance和新的Demo()來解釋.. –

+0

@vishalsharma:我不知道你的意思,但它似乎不相關這個問題沒有提到性能。 –

+0

我的意思是...使用Activator.CreateInstance創建對象和創建對象之間的性能影響... –