zoukankan      html  css  js  c++  java
  • 反射获取程序集的信息

    反射主要是用来获取类型和程序集的信息,在System.Reflection命名空间,通常是在System命名空间下的Type类一起使用; 

    获取程序集信息(Assembly)控制程序集,通过属性和方法可以获取程序集元数据信息,在获取元数据之前,需要先用Assembly类的Load方法(或LoadFile()LoadFrom())将程序集加载到内存中;Assembly是抽象类只能通过方法、字段等的返回值来声明对象, 就是通过load方法返回值来声明Assembly的对象,加载程序集,Loading是在

     Assembly a = Assembly.Load("MyReflection");
    

    除此之外可以利用GetType和Typeof来获取程序集中的类型,它们返回到都是Type的对象

    Type t = a.GetType("MyReflection." + PersonName);

    在调用的类的方法是时候,必须要创建类的实例,两种方法获取类的实例返回object类型

    方法一:通过Activator.CreateInstance()
    object obj = Activator.CreateInstance(t);
    //方法二:通过实例的方法来返回object 
    object obj = a.CreateInstance("MyReflection." + PersonName);

    如果没有定义抽象类和接口时用MethodInfo类的Invoke方法来执行程序集中类的实例方法,下面执行类中say方法

     MethodInfo mi = t.GetMethod("Say");、
     mi.Invoke(obj, null);

    下面来完成简单的反射动态获取程序集的信息以及类型方法的执行,这里定义程序集MyReflection,任意输入程序集中的类型,来执行指定类型的方法

    namespace MyReflection
    {
         class Program
           {
            static void Main(string[] args)
            {
    
    string PersonName = Console.ReadLine();
     Assembly a = Assembly.Load("MyReflection");
    Type t = a.GetType("MyReflection." + PersonName);
    object obj = Activator.CreateInstance(t);
    MethodInfo mi = t.GetMethod("Say");
    mi.Invoke(obj, null);
            }
    abstract class Person
        {
            public abstract void Say();
        }
        class Chinese : Person //继承
        {
            public override void Say()
            {
            }
        }
        class Han : Chinese
        {
            public override void Say()
            {
                Console.WriteLine("this is  Han Say()");
            }
            public void HanSay()
            { }
        }
        class DaiZu : Chinese
        {
            public override void Say()
            {
                Console.WriteLine("this is DaiZu Say()");
            }
        }
    
        class English : Person
        {
            public override void Say()
            {
                Console.WriteLine("this is English Say()");
            }
        }
    }

     

     

  • 相关阅读:
    EL表达式
    使用Cookie保存用户信息
    GUI学习之二——PyQt控件初识
    GUI学习之一——PyQt5初识
    HTML学习总结
    centos7 mysql的安装与配置
    Python之RabbitMQ的使用
    python之模块的导入
    Python之ftp服务器
    GUI学习之〇——PyQt5安装
  • 原文地址:https://www.cnblogs.com/sunli4295/p/fly.html
Copyright © 2011-2022 走看看