通过反射打破封装规则



我最近读了反射的整个概念,我知道使用C#这个工具的主要想法,但我仍然不能理解它的一个方面。我认为,如果有人能够通过反射执行私有方法,那么封装就没有任何意义。你介意让我知道这个误会吗?

使用反射调用私有方法

        string methodName = "";
        Type aclass = typeof (AClass);
        object obj = Activator.CreateInstance(aclass);
        Type t = typeof (AClass);
        MethodInfo [] mi = t.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance);
        methodName = mi[0].Name;
        MethodInfo PrivateMethod = typeof (AClass).GetMethod(methodName,BindingFlags.NonPublic | BindingFlags.Instance);
        Console.WriteLine(PrivateMethod.Invoke(obj,null));
        Console.ReadLine();

Class a类有一个私有方法

internal class AClass
    {
        private bool First()
        {
            return true;
        }
     }

输出:

真实

访问私有方法应该在单元测试的上下文中,尤其是在处理遗留代码时。

相关内容

  • 没有找到相关文章

最新更新