1、反射获取程序集的三种方式
Assembly.Load(); //这种方式只需要提供程序集的名称
Assembly.LoadFile(path); //这种方式需要提供程序集完整的路径
Assembly.LoadFrom("xxx.dll"); //需要程序集名称及其后缀名
2、获取类型
assembly.GetTypes(); //获取所有类型
assembly.GetType("命名空间.类名"); //获取指定类型
3、GetType
Type type = assembly.GetType("命名空间.类名");
PropertyInfo[] properties = type.GetProperties(); //获取类型所有的属性
FieldInfo[] fields = type.GetFields(); //获取类型所有的字段
MethodInfo[] methodInfos = type.GetMethods(); //获取类型所有的方法
4、Assembly自带的CreateInstance
1)、自带的CreateInstance实例化对象时需要指名命名空间和类名
object o = assembly.CreateInstance("命名空间.类名");
dynamic d = assembly.CreateInstance("命名空间.类名");
5、多态的使用
IPerson o = (IPerson)assembly.CreateInstance("Namespace.Student");
o.Name = "StevenWon";
string result = o.Run();
6、反射实例化带参构造函数
Assembly assembly = Assembly.LoadFrom("xxx.dll");
Type type = assembly.GetType("命名空间.类名");
//创建构造函数带参的实例
IPerson o = (IPerson)Activator.CreateInstance(type, "param");