zoukankan      html  css  js  c++  java
  • 反射

    反射:  这是.Net中获取运行时类型信息的方式,  应用程序由程序集(assembly),模块(module), (class)组成.而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息

    比如:

     Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。
    Type类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。
    MethodInfo包含方法的信息,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。
    诸如此类,还有FieldInfo、EventInfo等等,这些类都包含在System.Reflection命名空间下。

    引用命名空间:using System.Reflection;

    反射的核心类:Type

    例如:MyClass类

     class MyClass

        {

            public int zoo=1;

            public string Name { get; set; }

            public void Test(int a)

            {

                Console.WriteLine(a);

            }

            public void Test1<T>(T i)

            {

                Console.WriteLine(i);

            }

        }

    获得属性信息:PropertyInfo

     //属性

                Type t = typeof(MyClass);  //实例化类型

                object obj = Activator.CreateInstance(t); //生成对象

                var tt = t.GetProperties();  //获取所有属性信息

                foreach (var item in tt)

                {

                    item.SetValue(obj, "张三");//属性赋值

                    Console.WriteLine(item.Name);  //查看属性的名称

                    Console.WriteLine(item.PropertyType.Name);  //查看属性的数据类型

                    Console.WriteLine(item.GetValue(obj));//获取属性的值

                }

    获得方法信息:MethodInfo

     //方法

                MethodInfo m = t.GetMethod("Test");  //获得Test方法

                object[] Parmets = new object[] { 10 };  //需要传的参数

                m.Invoke(obj, Parmets);

    //泛型方法

     Assembly assembly1 = Assembly.Load("ConsoleApp1");  //加载ConsoleApp1命名空间

                Type t1 = assembly1.GetType("ConsoleApp1.MyClass")//ConsoleApp1下的mycalss类;

                object obj = Activator.CreateInstance(t1);  //实例对象

                MethodInfo m = t1.GetMethod("Test1"); //获得Test1的放法

                var o = new object[] { 4 }; //参数

                var m2 =m.MakeGenericMethod(new Type[] { typeof(int) }).Invoke(obj,o); //调用

  • 相关阅读:
    curl
    jQuery监控键盘事件
    SSL证书及HTTPS服务器
    小程序中接入微信支付完整教程
    微信小程序 icon组件详细介绍
    十步解决php utf-8编码
    php正则表达式过滤空格 换行符 回车
    css单位介绍em ex ch rem vw vh vm cm mm in pt pc px
    JavaScript返回上一页并自动刷新
    php的header函数之设置content-type
  • 原文地址:https://www.cnblogs.com/gbb44/p/10636290.html
Copyright © 2011-2022 走看看