zoukankan      html  css  js  c++  java
  • 反射

    获取信息

    Assembly assembly=Assembly.Load("DB.Sql"); 获取当前路径下的dll,不要后缀

    Assembly assembly1=Assembly.LoadFile(@"C:DB.Sql.dll");获取

    Assembly assembly2=Assembly.LoadFrom("DB.Sql.dll");

    foreach(var x in assembly.GetModules())  assembly.GetType()      assembly.GetCustomAttributes()   

    {

      cw(item.Name)

    }

    Type dbHelper=assembly.GetType("DB.Mysql.MySqlHelper");///获取类型

    object oDBHelper=Activator.CreateInstance(dbHelperType);//创建对象

    IDBhelper iDBHelper= oDBhelper as IDBHelper;

    iDBHelper.Query();

    1 如何理解
    2 相互转化?
    对象 描述对象信息的类
    Type TypeInfo
    Property PropertyInfo
    Parameter ParameterInfo

    反射的类

        (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。 
        (2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。 
        (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。 
        (4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。
        (5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。
        (6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。 
        (7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。 
        (8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。
        (9) MemberInfo 类是一个基类,它定义了EventInfo、FieldInfo、MethodInfo、PropertyInfo的多个公用行为 

    反射用到的命名空间:
        System.Reflection
        System.Type
        System.Reflection.Assembly
    Type类的方法:
            GetConstructor(), GetConstructors():返回ConstructorInfo类型,用于取得该类的构造函数的信息
            GetEvent(), GetEvents():返回EventInfo类型,用于取得该类的事件的信息
            GetField(), GetFields():返回FieldInfo类型,用于取得该类的字段(成员变量)的信息
            GetInterface(), GetInterfaces():返回InterfaceInfo类型,用于取得该类实现的接口的信息
            GetMember(), GetMembers():返回MemberInfo类型,用于取得该类的所有成员的信息
                      PropertyInfo(MemberInfo) .GetCustomAttributes()

            GetMethod(), GetMethods():返回MethodInfo类型,用于取得该类的方法的信息
            GetProperty(), GetProperties():返回PropertyInfo类型,用于取得该类的属性的信息

     利用System.Type.GetType方法,获得字符串中指定的控件的类型实例。
    typeName 可以是简单的类型名、包含命名空间的类型名,或是包含程序集名称规范的复杂名称。
    
    如果 typeName 只包含 Type 的名称,则此方法先是在调用对象的程序集中进行搜索,然后在 mscorlib.dll 程序集中进行搜索。如果 typeName 用部分或完整的程序集名称完全限定,则此方法在指定的程序集中进行搜索。
    
    AssemblyQualifiedName 可以返回完全限定的类型名称(包含嵌套类型和程序集名称)。所有支持公共语言运行库的编译器将发出嵌套类的简单名称,并且当被查询时,反射依照下列约定构造一个 mangled 名称。
    
    例如,类的完全限定名可能类似于如下形式:
    
    TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
    
    但是直接使用Type.GetType("System.Windows.Forms.TextBox")获得Type是Null。这是因为,Windows.Forms程序集是公有的程序集,是位于程序集缓存中的,而这个程序集有不同的版本,为了确定使用的版本,我们不仅要提供程序集的名称,还要提供程序集的版本和强名称。照这个思路,在使用的.net Framework 1.1上,将这一句写成Type.GetType("System.Windows.Forms.CheckBox, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")。现在运行就没有问题了。问题是我们如何取得所用Windows.Forms程序集的版本和强名称?可以用GetType(CheckBox).AssemblyQualifiedName这样的语法,一旦得到了这些信息,我们就可以将这些信息用于其它任何控件,因为他们都来自于同一个版本Windows.Forms程序集。
  • 相关阅读:
    nyoj 110 剑客决斗
    nyoj 16 矩形嵌套
    nyoj 17 单调递增最长子序列
    nyoj 37 回文字符串
    nyoj 44 子串和
    nyoj 36 最长公共子序列
    使用Broadcast实现android组件之间的通信 分类: android 学习笔记 2015-07-09 14:16 110人阅读 评论(0) 收藏
    ubuntu中安装samba 分类: linux 学习笔记 ubuntu 2015-07-07 16:14 46人阅读 评论(0) 收藏
    ubuntu中安装eclipse 分类: android ubuntu linux 学习笔记 2015-07-07 10:19 75人阅读 评论(0) 收藏
    ubuntu中安装jdk 分类: java 学习笔记 linux ubuntu 2015-07-06 17:49 74人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/mingjing/p/7510005.html
Copyright © 2011-2022 走看看