标签:vat 赋值 val str intern span setvalue 获取 方法
using System; using System.Reflection; //反射 //反射:可以通过类名、成员的名字来进行对象的实例化、操作类成员 class Person { public int a; private int b; public static int c; private static int d; //private Person() //public Person() internal Person() { Console.WriteLine("Person类无参的构造方法被调用"); Console.ReadLine(); } private Person(int a, double b, string c) { Console.WriteLine("Person类有参的构造方法被调用"); Console.ReadLine(); } public void ShowA() { } private void ShowB() { } public static void ShowC() { } private static void ShowD() { } public int Show(int a, double b) { return a; } private double Show(double a, int b) { return b; } } class Program { static void Main(string[] args) { //实例化一个Person对象 //通过类名来获取一个类型 //命名空间:如果这个类在一个命名空间中,那么在写类型名的时候需要加上命名空间 //例如:systm.Int32 Type t = Type.GetType("Person"); //实例化一个对象,默认使用public权限的无参的构造方法来实例化 // object obj = Activator.CreateInstance(t); //实例化一个对象,true表示如果公共或非公共默认构造函数都可以匹配 //fales 表示只有公共的默认构造函数可以匹配 //object obj = Activator.CreateInstance(t,true ); //实例化一个对象,是通过public权限的有参的构造方法来实例化 //object obj = Activator.CreateInstance(t, 1,3.1,"hello"); //实例化一个对象,通过非public权限的有参构造方法来实例化 object obj = Activator.CreateInstance(t, BindingFlags.NonPublic|BindingFlags.Instance,null,new object[]{ 1,2.3,"hello"},null); //BindingFlags:要访问的方法或字段的权限描述,必须要同时具备两个描述 //1.要有要访问的成员的权限描述 BindingFlags.NonPublic BindingFlags.Public //2.要有要访问的成员的归属 静态的:BindingFlags.Static 非静态的:BindingFlags.Instance //通过反射访问类中的字段 //1.访问public权限的非静态的字段a FieldInfo a = t.GetField("a"); a.SetValue(obj,1); //给obj对象的a字段进行赋值,值为1 object aa = a.GetValue(obj); //获取对象obj的字段a的值 //2.访问private权限的非静态的字段b FieldInfo b = t.GetField("b",BindingFlags.NonPublic|BindingFlags.Instance); b.SetValue(obj, 3); object bb = b.GetValue(obj); //3.访问public权限的静态的字段c FieldInfo c = t.GetField("c", BindingFlags.Public | BindingFlags.Static); c.SetValue(null,5); //如果要访问的是一个静态的成员,则访问的主体是null object cc = c.GetValue(null); //4.访问private权限的静态的字段d FieldInfo d = t.GetField("d", BindingFlags.NonPublic | BindingFlags.Static); d.SetValue(null, 3); object dd = d.GetValue(null); //通过反射访问类中的方法 //1.获取没有参数的方法 MethodInfo method0 = t.GetMethod("ShowD", BindingFlags.NonPublic | BindingFlags.Static); //方法调用,第一个参数是谁在调用方法,第二个参数是调用的方法的实参列表 method0.Invoke(null,null); //2.获取有参数有重载的方法 //Type数组中传要访问的方法的参数类型列表 //typeof 来获取已知类型 MethodInfo method1 = t.GetMethod("Show", BindingFlags.Public | BindingFlags.Instance, null,new Type[] {typeof(int),typeof(double)},null); //第二个参数是实参列表 //Invoke方法的返回值,就是method1方法的返回值 object result = method1.Invoke(obj, new object[] { 1, 1.45 }); Console.WriteLine(result); } }
标签:vat 赋值 val str intern span setvalue 获取 方法
原文地址:https://www.cnblogs.com/zySun622/p/10556128.html