背景:因项目需求,二次开发个日志,需要记录菜单路径,之前的框架开发给封装保存在父类里面的私有字段了
主要是用到反射,注意以下几点
1. BindingFlags.NonPublic :查找非公共内容
2. 看你取值的类是本类还是父类、父类的父类等等,Type.BaseType取父类,可以继续加,调试下类型对不对
3. 用GetField方法取值可以取到private属性值,GetProperty适合取public属性值
部分代码
protected void btnExport_Click(object sender, EventArgs e)
{
var type = this.GetType();
BindingFlags flag = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
var field = type.BaseType.BaseType.GetField("私有字段名", flag);
var menu_path = field.GetValue(this);
}