被这个问题困了很长时间。
给出类名(string),如何动态创建(字符串名的)对象
例如下边代码:Exe_Class函数里应该如何写?namespace ConsoleApplication_dynamic_obj
{
class Program
{
static void Main(string[] args)
{
//Exe_Class("test");
Exe_Class("test1");
} static void Exe_Class(string class_name)
{
}
} public class test
{
public test()
{
Console.WriteLine("test");
} } public class test1
{
public test1()
{
Console.WriteLine("test1");
}
}
}
给出类名(string),如何动态创建(字符串名的)对象
例如下边代码:Exe_Class函数里应该如何写?namespace ConsoleApplication_dynamic_obj
{
class Program
{
static void Main(string[] args)
{
//Exe_Class("test");
Exe_Class("test1");
} static void Exe_Class(string class_name)
{
}
} public class test
{
public test()
{
Console.WriteLine("test");
} } public class test1
{
public test1()
{
Console.WriteLine("test1");
}
}
}
{
object obj= Type.GetType(class_name).Assembly.CreateInstance(class_name);
}
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Exe_Class("test1");
} static void Exe_Class(string class_name)
{
Activator.CreateInstance(null, "ConsoleApplication1." + class_name);
Console.Read();
} } public class test
{
public test()
{
Console.WriteLine("test");
} } public class test1
{
public test1()
{
Console.WriteLine("test1");
}
}
}
(t.Assembly.CreateInstance(t.FullName) as Form).Show();// string s = "System.Windows.Forms.Form"; 则无法获取 Type t
// 可见 LZ 所传递的 class_name 的准确性是程序正确运行的保证
不过如果我还想调用类里一个方法呢?
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Exe_Class("test1");
} static void Exe_Class(string class_name)
{
Activator.CreateInstance(null, "ConsoleApplication1." + class_name);
Console.Read();
} } public class test
{
public test()
{
Console.WriteLine("test");
} } public class test1
{
public test1()
{
Console.WriteLine("test1");
}
}
}
Type.GetType(className).InvokeMember(".ator", BindingFlags.CreateInstance, null, null, args);执行类名对应的类的构造函数