一个类的受保护成员的反射

6
using System;
using System.Reflection;

namespace Reflection

{
    class Test
    {
        protected void methodname()
        {
            Console.WriteLine(("in the world of the reflection"));
            Console.Read();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
           // BindingFlags eFlags = BindingFlags.Default | BindingFlags.Instance | BindingFlags.Public|BindingFlags.NonPublic;
            BindingFlags eFlags = BindingFlags.Instance|BindingFlags.NonPublic;
            Test aTest = new Test();
            MethodInfo mInfoMethod = typeof(Reflection.Test).GetMethod("methodname", eFlags);
            mInfoMethod.Invoke(aTest, null);

        }
    }
}

根据 MSDN,BindingFlags.Nonpublic 用于访问非私有成员。如果我只使用此枚举,则 Getmethod 返回 null 值。但是,如果使用 Instance 和 Nonpublic 枚举,则调用所需的方法。这两者之间有什么区别?何时需要使用实例和公共/非公共组合。

这似乎是在.Net 4.0中的一个变化:我有一段类似的代码,在.Net 3.5中完美运行,但我不得不将标志从“NonPublic”更改为“Public”,才能让它在4.0上工作。 - Medinoc
2个回答

5
根据 GetMethod() 的文档
必须指定 BindingFlags.InstanceBindingFlags.Static 才能得到返回值。 Instance/StaticPublic/NonPublic 指定了两件不同的事情,你必须同时指定这两个才能得到结果。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接