引言:
C# 动态创建对象只要有两大类 Activator 和 Assembly 。
Activator 类
Activator 类提供好几个动态创建对象的重载方法。
1:public static object CreateInstance(Type type); 2:public static object CreateInstance(Type type, params object[] args);
动态创建对象主要接受的参数为Type,而获取Type对象有三种方式
1:Type type = Type.GetType("命名空间名称.类名"); 2:Type type = typeof("类名"); 3:Person p = new Person(); //通过对象来进行创建type Type type = p.GetType();
两种方法区别仅为:创建无参数的构造方法和创建有参数的构造函数。
Type type = typeof(Person); var p = Activator.CreateInstance(type) as Person; public class Person { public Person() { } public Person(string name, int age) { this.Name = name; this.Age = 1; } public string Name { set; get; } public int Age { set; get; } public void SayHello() { Console.WriteLine("你好"); } }
动态创建创建有参数的构造函数
Type type = typeof(Person); var p = Activator.CreateInstance(type,new object[] { "xiaohong",1}) as Person; Console.WriteLine(p.Name);
Assembly 类
//Assembly ass = Assembly.Load(Assembly.GetExecutingAssembly().FullName); 知道当前创建的对象是当前程序集 // Assembly ass = Assembly.LoadFile(@"程序集的全路径"); Assembly ass = Assembly.LoadFrom(@"程序集的全路径"); // LoadFile和LoadFrom 区别是 LoadFrom它会载入dll文件及其引用的其他dll,而LoadFile 只载入相应的dll文件 Type type = null; ass.GetTypes().ToList().ForEach(i => { if (i.IsClass && i.IsPublic && i.Name == "Person") { type = i; } }); var p = Activator.CreateInstance(type, new object[] { "xiaohong", 1 }) as Person; Console.WriteLine(p.Name); Console.ReadKey();