private const BindingFlags FindBinding = BindingFlags.Instance | BindingFlags.NonPublic;//这是干吗用的?
private static Hashtable tmpHashtable = new Hashtable();
private static Form tmpForm;
public static MenuItem GetMenuItemByName(Form FormIstance, string MenuItemName)
{
FieldInfo MenuItemFieldInfo;
MenuItemFieldInfo = FormIstance.GetType().GetField("_" + MenuItemName, FindBinding);//这是调用吧!
if (MenuItemFieldInfo == null)
{
return null;
}
else
{
return ((MenuItem) (MenuItemFieldInfo.GetValue(FormIstance)));
}
}哪位帮忙解释下,注释的地方!!

解决方案 »

  1.   

    Q: private const BindingFlags FindBinding = BindingFlags.Instance ¦ BindingFlags.NonPublic;
    A: BindingFlags 指定控制绑定和由反射执行的成员和类型搜索方法的标志。 这里制定搜索非公有的实例成员。Q: MenuItemFieldInfo = FormIstance.GetType().GetField("_" + MenuItemName, FindBinding);
    A: 这里是在获取FormIstance中那个名字叫做("_" + MenuItemName)的成员变量,并不是调用方法啊
      

  2.   

    第一个注释的地方是指搜索方式的限定.这里指的是搜索实例变量(instance)
    第二个注释值得是取出本队象中一个名字叫做 MenuItemName这个变量值 的实例 。但请注意,它只是通过fieldinfo取出了该种类型(务必注意是类型)中的一个实例.具体确定的某个对象的实例变量的值,还要用MenuItemFieldInfo.getvalue()去取
    而getvalue方法的一个参数就是具体的一个对象,比如FormIstance
      

  3.   

    第一个注释的地方是指搜索方式的限定.这里指的是搜索实例变量(instance) 
    第二个注释指的是取出本对象中一个名字叫做 MenuItemName 的实例变量 。但请注意,它只是通过fieldinfo取出了该种类型(务必注意是类型)中的一个实例变量.具体确定的某个对象的实例变量的值,还要用MenuItemFieldInfo.getvalue()去取 
    而getvalue方法的一个参数就是具体的一个对象,比如FormIstance这里的 MenuItemName 和 FormIstance都是方法传入的