• 创建反射实例|反射过滤|反射搜索


    //创建反射实例
    方法一:这个方法需要一个字符窜类型的参数,该参数表示要加载的程序集的名称

    Assembly myAssembly = Assembly.Load("System.Drawing");

    方法二:这个方法需要传递一个包含.NET程序集路径和名字的字符窜类型的参数

    string path = @"C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Drawing.dll";
    Assembly myAssembly = Assembly.LoadFrom(path);

    方法三:这个方法使用关键字typeof获取程序集

    Assembly otherAssembly = typeof(System.Data.DataRow).Assembly;

    方法四:GetType方法。该方法可以用在所有.NET对象上

    DataTable dt = new DataTable();
    Assembly otherAssembly = dt.GetType().Assembly;

    如有以下控制台程序集
    using System;
    using System.Reflection;
    namespace Basics
    {
         public enum testEnum
         {
             testValue = 1
         }

        public class testClass
         {

            public static void Main()
            {

            }

         }
    }

    为了能够访问这两个类型,你需要调用Assembly.GetTypes 代码如下

    Assembly myAssembly = Assembly.Load("Basics");
    Type[] types = myAssembly.GetTypes();
    foreach(Type type in types)
    {
        if(type.IsClass)
            Console.WriteLine(type.Name);
    }


    下面的代码在其自己的基础上创建了一个Assembly实例并且在其包含的类型中迭代

    using System;
    using System.Reflection;
    namespace Basics
    {
        public class testClass
        {
            public static void Main()
            {
                Assembly myAssembly = Assembly.Load("Basics");
                Type[] types = myAssembly.GetTypes();
                foreach(Type type in types)//迭代
                {
                    Console.WriteLine("Type:{0}",type.Name);
                }
                Console.ReadLine();
            }
        }
    }


    反射的过滤


    如有以下类

    public class OtherClass
    {
            public void OtherMethod()
            {}
            public static void OtherStaticMethod()
            {}
            public static void AnotherStaticMethod()
            {}
    }

    在这里,你会看到,它有三个公共的方法,其中的两个为静态的方法。假设你想通过反射找出类OtherClass里的所有公共的静态方法,你将会调用GetMethods方法,代码如下

    MethodInfo[] mis = typeof(OtherClass).GetMethods(BindingFlags.Public | BindingFlags.Static);


    反射的搜索(Type类的方法FindMembers)

    如有以下类

    public class AnotherClass
    {
            private int myPrvField1 = 15;
            private string myPrvField2 = "Some private field";
            public decimal myPubField1 = 1.03m;
    }

    假设你需要使用Type类的方法FindMembers来获取AnotherClass实例上的私有字段,并且显示它们的值

    代码如下

    FieldInfo fi;
    AnotherClass ac = new AnotherClass();
    MemberInfo[] memInfo = ac.GetType().FindMembers(MemberTypes.Field,BindingFlags.NonPublic | BindingFlags.Instance,null,null);
    foreach(MemberInfo m in memInfo)
    {
        fi = m as FieldInfo;
        if(fi != null)
        {
            Console.WriteLine("{0} of value:{1}",fi.Name,fi.GetValue(ac));
        }
    }


     

  • 相关阅读:
    JSONObject和JSONArray区别及基本用法
    MySQL中UTF8编码的数据在cmd下乱码
    js页面刷新跳转的几种方式及区别
    JS中使用EL表达式
    $.ajax()方法参数详解
    Firefox默认英文修改中文
    配置文件的相对地址和绝对地址设置
    IntelliJ IDEA设置统一编码utf-8
    java.lang.SecurityException: Prohibited package name:
    flask的多个url对应同一个视图函数
  • 原文地址:https://www.cnblogs.com/xiaobaigang/p/846331.html
Copyright © 2020-2023  润新知