zoukankan      html  css  js  c++  java
  • 程序集

    所有.Net类都是定义在某个Assembly(程序集)中的,.Net基本类是定义在mscorlib.dll中。exe也可以看做是类库,也可以引用。.netexe也是Assembly.net中的exedll的区别就是exe中包含入口函数,其他没有区别,exe也可以当成dll那样引用、也可以反编译。
    GAC:全局程序集缓存。公用的Assembly放到GAC中。(*)
    Assembly类是对程序集的描述(*)。
    (*)AppDomain.CurrentDomain.GetAssemblies()获得程序所有的Assembly
    Assembly.LoadFile(),动态从文件加载Assembly,不需要在编译的时候引用。
     
    反射:Type
        Type类可以叫做“类的类”,一个类型对应一个Type类的对象,通过Type对象可以获得类的所有的定义信息,比如类有哪些属性、哪些方
    等。Type就是对类的描述。
     
      获得Type对象的方法:
    通过类获得TypeType t = typeof(Person)
    通过对象获得类的TypeType t = p.GetType()
    调用AssemblyGetExportedTypes方法可以得到Assembly中定义的所有的public类型。
    调用AssemblyGetTypes()方法可以得到Assembly中定义的所有的类型。
    调用AssemblyGetType(name)方法可以得到Assembly中定义的全名为name的类型信息。
     
    Activator.CreateInstance(Type t)会动态调用类的public无参构造函数创建一个对象,返回值就是创建的对象,如果类没有无参构造函
    数就会报错。
     
    应用:动态创建对象SayHello(代码见备注)。接口声明到单独的项目中,避免循环引用。
    Type类的方法:
    bool IsAssignableFrom(Type c):(直译:是否可以从c赋值)判断当前的类型的变量是不是可以接受c类型变量的赋值。IDbCommandsp; SqlCommandbsp; AccessSettingsProvider msp; sp可以从bspmsp赋值(sp=bspsp=msp)。 bsp可以从msp赋值(bsp=msp)
    bool IsInstanceOfType(object o):判断对象o是否是当前类的实例(当前类可以是o的类、父类、接口)
    bool IsSubclassOf(Type c)判断当前类是否是类c的子类。类的事,没有接口的事。如果当前类
    MemSettingsProvidercISettingsProvider,则返回false
     
    动态调用成员
    使用备注中的Person类进行测试。
     
    调用TypeGetProperty方法可以根据属性名获得属性对象PropertyInfo,主要成员:CanReadCanWritePropertyType属性类
    型;SetValueGetValue:读取值,设置值,第一个参数是实例对象,因为setget要针对具体实例,最
    nulltype.GetProperty(“Age”).SetValue(p1, 30, null),TypeMethodInfo都是和具体对象不相关的,所以需要第一个
    参数指定要执行的对象。
     
    调用TypeGetMethod方法可以根据方法名获得方法对象MethodBase,调用MethodBase Invoke方法就可以调用方法,第一个
    参数是实例对象,第二个参数是参数数组,如果没有参数设置为null。对Age不能SetValue(p1,"20",null)
     
    GetMethod方法默认一个string参数的方法只能获得没有重载方法的方法,要获得重载方法要用GetMethod(string name, Type[] 
    types)这个重载函数,第二个参数是匹配方法的参数类型数组。
     
    Type类还有很多方法:GetConstructor(获得构造函数)、GetEvent(获得事件)、GetProperties(获得所有属性)等。
  • 相关阅读:
    爬虫流程
    康哥笔记
    csdn笔记
    数据库多表联查
    完整数据恢复
    Linux安装mysql
    linux在vm下实现桥接模式
    Linux下ntpdate时间同步
    spark集群在执行任务出现nitial job has not accepted any resources; check your cluster UI to ensure that worker
    flume在启动时出现brokerList must contain at least one Kafka broker
  • 原文地址:https://www.cnblogs.com/xiaowuzi/p/3307969.html
Copyright © 2011-2022 走看看