引言:
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();
