使用反射,可以获取其他类中的私有字段、属性、私有方法等。
测试使用的类如下:
public class Model
{
/// <summary>
/// 字段
/// </summary>
public string _name = "Reflection";
private int _id;
protected bool _isAdmin = true;
/// <summary>
/// 属性
/// </summary>
public string Name
{
get { return this._name; }
set { this._name = value; }
}
public int Id
{
get { return this._id; }
set{this._id=value;}
}
protected bool isAdmin { get; set; }
/// <summary>
/// 方法
/// </summary>
private int PrivateMethod(int i, int j)
{
return (i +j)* 2;
}
protected void ProtectedMethod()
{
}
/// <summary>
/// 构造方法
/// </summary>
public Model()
{
this.Id = 0;
}
}
测试代码如下:
static void Main(string[] args)
{
var model = new Model();
Type t = typeof(Model);
t.GetProperty("Id").SetValue(model, 111, null);
//field 字段: 私有字段
var prop = model.GetType().GetField("_id", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
prop.SetValue(model, 13);
//property 属性
PropertyInfo property = model.GetType().GetProperty("Name");
property.SetValue(model, "test",null);
//method 私有方法
MethodInfo method = model.GetType().GetMethod("Android", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
//参数
object[] obj = new object[2] { 1, 3 };
object returnVal = method.Invoke(model, obj);
Console.ReadKey();
}