2013-11-14 46 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创建对象和创建对象之间的性能影响... –