zoukankan      html  css  js  c++  java
  • .net Reflection(反射)- 一

      Reflection 反射需要引用 using System.Reflection; 命名空间。

       通过 Assembly 类的 Load( ); 加载指定的 程序集

         Assembly 是不能被实例化, 所以能通过调用静态方法Load();加载指定程序集。

         通过GetType()RefLiuyl中GetCond的类型

    Assembly assembly = Assembly.Load("RefLiuyl");           
    //获取类型,参数(名称空间+类)   
    Type type = assembly.GetType("RefLiuyl.GetCon");

     还有一种当使用泛型的时候 GetName<T>() 。 直接 获取类型Type type = typeof(T);

     我们来看看部分内部Load原型静态方法:

        //Assembly内部Load原型 --部分
        public class Assembly
        {
            //Load静态重载原型
            public static Assembly Load(AssemblyName assemblyRef);
            public static Assembly Load(string assemblyString);
        }
    这里的 AssemblyName 其实就是取 程序集
     AssemblyName classlibrary = new AssemblyName("ClassLibrary");
     Assembly assembly = Assembly.Load(classlibrary);

     Assembly 还可以通过路径来加载程序集

      Assembly assem = Assembly.LoadFrom("path");

        //Assembly内部Load原型 --部分
        public class Assembly
        {
            //Load静态重载原型 
            public static Assembly LoadFrom(string path);
        }

    二。构造类型的实例

    Assembly assembly = Assembly.Load("RefLiuyl");           
    //获取类型,参数(名称空间+类)   
    Type type = assembly.GetType("RefLiuyl.GetCon");
    获取到类型后,我们需要实例化它。

    通过System.Activator的CreateInstance方法来实例化它。
                AssemblyName classlibrary = new AssemblyName("ClassLibrary");
    
               // Assembly assembly = Assembly.Load(classlibrary);
                Assembly assembly = Assembly.Load("ClassLibrary");
    
                //通过GetType()获取类型
                //获取类型,参数(名称空间+类)   
                Type type = assembly.GetType("ClassLibrary.Student");
    
                //创建该对象的实例,object类型,参数(名称空间+类)   
                object instance = assembly.CreateInstance("ClassLibrary.Student");
    
                //或者直接使用type
                object instance1 = Activator.CreateInstance(type);
    
                //当使用泛型
                Type type = typeof(T);
                T destObj = Activator.CreateInstance<T>();
     Activator.CreateInstance(); 返回的就是 类实例


    GetProperties(); 返回程序集类型中的所有属性
                //通过GetType()获取类型
                //获取类型,参数(名称空间+类)   
                Type type = assembly.GetType("ClassLibrary.Student");
                foreach (PropertyInfo prop in type.GetProperties())
                {
                    string namses= prop.Name;
                }

    返回的就是 程序集中 实例类的属性字段。



  • 相关阅读:
    技术博客开博,谢谢大家
    数据库自动备份,crontab定时任务
    服务器端口对外开放(包括,mysql,django)
    记 第一次linux下简易部署 django uwsgi nginx
    Oracle Undo表空间使用情况分析
    Oracle自动启动脚本配置
    Oracle 12cR2 RAC节点查询GV$视图报错ORA-12805
    Oracle 12cR2 RAC集群安装指南
    基于Java SSM框架和layui构建的博客、论坛、新闻、文章随笔系统(包含前后台)
    SSM实现java开发电子手机商城在线商城系统源码 MySQL数据库
  • 原文地址:https://www.cnblogs.com/dragon-L/p/3711931.html
Copyright © 2011-2022 走看看