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); //调用

  • 相关阅读:
    hdoj 4006 The kth great number【优先队列】
    hdoj 1509 Windows Message Queue【优先队列】
    nyoj 55 懒省事的小明【优先队列】
    hdoj 1896 Stones【优先队列】
    nyoj 757 期末考试【优先队列+贪心】
    hdoj 2147 kiki's game【博弈】
    hdoj 1873 看病要排队【优先队列】
    hdoj 1789 Doing Homework again
    nyoj 1036 非洲小孩【贪心区间选点】
    转:栈和队列小知识【STL用法】
  • 原文地址:https://www.cnblogs.com/gbb44/p/10636290.html
Copyright © 2011-2022 走看看