如何得到一个类或实体的私有字段信息?如通过反射GetFields方法只能得到公有字段,私有字段怎么得到呢?

解决方案 »

  1.   

    FieldInfo fi = t.GetField("myValue",BindingFlags.NonPublic |BindingFlags.Instance);
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    public class ChangeValue
    {
        private string myValue="old Value";
    public ChangeValue(string str)
    {
    myValue = str;
    }
    public void WriteLine()
    {
    Console.WriteLine("MyValue is: " +  myValue);
    }
     
    }using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;namespace TestChangeValue
    {
    class Program
    {
    static void Main(string[] args)
    {
    Assembly objAss = Assembly.LoadFrom(@"ChangeValue.dll");
    Type t = objAss.GetType("ChangeValue");
    Type[] types = new Type[1];
    types[0] = typeof(string);
    ConstructorInfo ci = t.GetConstructor(types); //調用帶一string參數構造函數 

    //object obj = System.Activator.CreateInstance(t);  
    object[]  objs= new object[1]{"old value"};
    object obj = ci.Invoke(objs);
    MethodInfo mi = t.GetMethod("WriteLine");//調用writeline方法
    mi.Invoke(obj, null); FieldInfo fi = t.GetField("myValue", //調用私有變量
    BindingFlags.NonPublic |BindingFlags.Instance);
    fi.SetValue(obj, "new Value"); //改寫私有變量
    mi.Invoke(obj, null);
    Console.ReadLine();
    }
    }
    }