主要班级......
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"}
请帮我解决这个错误!。
答案 0 :(得分:5)
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)
。