反射


1,反射获取程序集的三种方式

  Assembly assenbly=Assembly.LoadFile()//这种只需要提供程序集的名称

  Assembly assenbly=Assembly.LoadFile(Path)//这种需要程序集 的路径

  Assembly assenbly=Assembly.Load("Ace.dll") //这种需要程序集的名称和后缀名

2,获取类型

  Type[] types=assenbly.GetType();//获取所有类

  Type[] types=assenbly.GetExportedTypes();//获取所有公共类

  types.First(c=>c.name=...);

  Type type=assenbly.GetType(“命名空间.类名”);//获取指定类名的类

3.GetType

  PropertyInfo[] props=types.Getproperties();//获取所有属性

  PropertyInfo[] field=types.GetFields();//获取所有字段

  1.   PropertyInfo[] methods=types.GetMethods();//获取所有方法

4,实例化 Assembly自带的CreateInstance

  object o=assembly.CreateInstance("命名空间.类名");

  o.Name="艾斯奥特曼"//报错

  dynamic d=assembly.CreateInstance("命名空间.类名");//自动转换渲染 没有自动提示,容易出错

  d.Name="艾斯奥特曼"

5,使用多态

  以上改为://接口作为层和层的衔接

  接口 d=(接口)assembly.CreateInstance("命名空间.类名");//自动转换渲染 没有自动提示,容易出错

  d.Name="艾斯奥特曼"

6,配置文件

  在AppSetting里面获取字符段,string configuration=ConfigurationManager.AppSettings["key"];

  使用反射可以只在配置文件修改配置文件

 7,在有构造函数的类使用

  Assembly assenbly=Assembly.LoadFile(Path)//这种需要程序集 的路径

  Type type=assenbly.GetType(“命名空间.类名”);//获取指定类名的类

 IUltraman b= (IUltraman )Activor.CreateInstrance(type,Params 构造函数的参数);

1,路径

  AppDomain.CurrentDomain.BaseDirectory

2,类筛选

  typs.First(m=>!m.IsAbstract && typeof(IUltraman).IsAssignableFrom(m))//不是抽象且是IUltraman的子类

3,把多个dll文件扔到一个文件夹,通过反射这个文件夹添加按钮,其实不难.

   

相关