【.Net码农】C#反射获取 所有字段 及 私有字段

来源:互联网 发布:linux vsftpd 怎么使用 编辑:程序博客网 时间:2024/06/03 20:41

http://blog.csdn.net/liyifei21/article/details/34838375




using System;  using System.Collections.Generic;  using System.Text;  using System.Reflection;  namespace ReflectionDemo  {      class Program      {          static void Main(string[] args)          {              Type t = typeof(ChangeValue);              Type[] types = new Type[0];//为构造函数准备参数类型              ConstructorInfo ci = t.GetConstructor(types); //获得构造函数              object[] objs = new object[0];//为构造函数准备参数值              object obj = ci.Invoke(objs);//调用构造函数创建对象              MethodInfo mi = t.GetMethod("WriteLine");//获得公有的writeline方法              mi.Invoke(obj, null);              FieldInfo fi = t.GetField("myValue", BindingFlags.NonPublic | BindingFlags.Instance);//获得私有字段              FieldInfo[] fis=t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance|BindingFlags.Public);              Console.WriteLine(fis.Length);              foreach (var fieldInfo in fis)              {                  Console.WriteLine( fieldInfo.FieldType+":"+ fieldInfo.Name + ":" + fieldInfo.GetValue(obj) );              }              fi.SetValue(obj, "new Value"); //改写私有字段              mi.Invoke(obj, null);              MethodInfo mi2 = t.GetMethod("Write", BindingFlags.NonPublic | BindingFlags.Instance);//获得私有的Write方法              mi2.Invoke(obj, null);              Console.ReadLine();          }      }      public class ChangeValue      {          private string myValue = "old Value";          public string firstValue = "values1";          public void WriteLine()          {              Console.WriteLine("MyValue is: " + myValue);          }          private void Write()          {              Console.WriteLine("MyValue is: " + myValue);          }      }  }  











1 0
原创粉丝点击