首页 > 其他分享 >反射

反射

时间:2023-01-10 00:11:17浏览次数:34  
标签:反射 Console int WriteLine Test Type public

  class Test
    {
        private int i = 1;
        public int j = 0;
        public string str = "123";

        public Test()
        {

        }

        public Test(int i)
        {
            this.i = i;
        }

        public Test(int i,string str):this(i)
        {
            this.str = str;
        }

        public void Speak()
        {
            Console.WriteLine(i);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Type type1 = typeof(int);

            Type type2 = Type.GetType("System.Int32");

            //通过Type可以得到类型所在程序集信息
            Console.WriteLine(type1.Assembly );
            Console.WriteLine(type2.Assembly );
            Console.WriteLine("****************************");
            Console.WriteLine("****************************");


            //获取类中的所有公共成员
            //1首先得到Type
            Type t = typeof(Test);
            //然后得到所有公共成员
            MemberInfo[] infos = t.GetMembers();
            for (int i = 0; i < infos.Length ; i++)
            {
                Console.WriteLine(infos[i]);
            }

            Console.WriteLine("****************************");
            Console.WriteLine("****************************");
            //获取所有构造函数
            ConstructorInfo[] ctors = t.GetConstructors();
            for (int i = 0; i < ctors.Length; i++)
            {
                Console.WriteLine(ctors[i]);
            }

            Console.WriteLine("****************************");
            Console.WriteLine("****************************");
            //2获取其中一个构造函数 并执行
            //得到构造函数传入 Type数组 数组中内容按顺序是参数类型
            //执行构造函数传入 object数组 表示按顺序传入的参数
            // 2-1 得到无参构造
            Type[] ty = new Type[0] {};//没有参数


           
            ConstructorInfo info = t.GetConstructor(new Type[0]);
            Test obj= info.Invoke(null) as Test ;

            Console.WriteLine(obj.j );
            Console.WriteLine("****************************");
            Console.WriteLine("****************************");

            //2-2得到有参构造
            ConstructorInfo info1 = t.GetConstructor(new Type[] { typeof(int) });

            obj = (Test)info1.Invoke(new Object[] { 5});

            //通过反射获取对象的值
            FieldInfo fis = t.GetField("i",BindingFlags.NonPublic|BindingFlags.Instance  );
            Object in1=  fis.GetValue(obj);
            Console.WriteLine(in1);

            Console.WriteLine("****************************");
            Console.WriteLine("****************************");

            //通过反射设置对象的值
            fis.SetValue(obj, 100);
            Object in2 = fis.GetValue(obj);
            Console.WriteLine(in2);

            Console.WriteLine("****************************");
            Console.WriteLine("****************************");


            //获取类的公共成员方法
            //通过Type类中的GetMethod方法 得到类中参数类型
            //MethodInfo 是方法的反射信息


            //1、如果存在方法重载 用type数组表示参数类型
            Type strtype = typeof(string);

            MethodInfo[] method = strtype.GetMethods();  //获取多个方法
            for (int i = 0; i < method.Length; i++)
            {
                Console.WriteLine(method[i]);
            }


            //2 调用该方法
            //注意:如果是静态方法 invoke中的第一参数传null即可


            Console.ReadKey();
        }
    }

标签:反射,Console,int,WriteLine,Test,Type,public
From: https://www.cnblogs.com/L-love-Z/p/17038923.html

相关文章

  • 利用反射获取android.os.SystemProperties 属性
    记录一下项目用到的工具类importandroid.content.Context;importjava.lang.reflect.Method;publicclassSystemPropertyUtil{/***根据给定Key获取值.......
  • C#-反射机制的简单示例
    反射:指程序可以访问、检测和修改它本身状态或行为的一种能力;通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息......
  • 一篇文章彻底弄懂 Java 反射的使用
    文章引用自:一篇文章彻底弄懂Java反射的使用原文链接:https://zhuanlan.zhihu.com/p/378412723说到Java反射,必须先把Java的字节码搞明白了,也就是 Class ,大 Class......
  • 反射
    属性varprops=typeof(RectTransform).GetProperties();foreach(varpropinprops){Debug.Log($"{prop.Name}({prop.PropertyType.Name}):{prop.Module},{p......
  • SSDP反射放大攻击理论原理
    什么是SSDPDDoS攻击?简单服务发现协议(SSDP)攻击是一种基于反射的分布式拒绝服务(DDoS)攻击,它利用通用即插即用(UPnP)网络协议将放大的流量发送给目标受害者,使目......
  • 反射5 - 获取注解信息
    反射获取注解信息什么是ORM?ObjectrelationshipMapping--对象关系映射(数据库关系)类->表类中属性->表的字段类的对象->表中的记录通过注解联系属性与数据......
  • 反射4 - 获取泛型
    反射获取泛型信息ParameterizedType:表示一种参数化类型,比如CollectionGenericArrayType:表示一种元素类型是参数化类型或者类型变量的数组类型TypeVariable:是各种类型......
  • 反射3 - 创建对象、调用方法
    反射-练习反射机制的优势很明显:它可以实现动态创建对象和编译,体现出语言很大的灵活性,这也是反射被广泛用于各种框架中的最主要原因。反射机制的缺点也是显而易见的......
  • 反射2 - 类加载器
    类加载器Java的类主要分为3种Java核心类库:String,Object...JVM软件平台开发商自己声明定义的类:User,Child...相应的类加载器也有3种--Java17BootClassLoade......
  • 反射1 - 基础
    反射对象获取自身的类对象再通过类对象获取类中的属性、方法、权限等publicclass_Reflect{publicstaticvoidmain(String[]args)throwsNoSuchFieldExcepti......