通过Reflection打破封装规则

时间:2015-11-09 09:22:32

标签: c# reflection

我最近阅读了反思的全部概念,我知道使用这种C#工具的主要思想但我仍然无法理解其中的一个方面。我认为,Encapsulation没有任何意义,如果有人有能力通过反射执行私有方法。你能不能让我知道这个误解吗?

使用反射调用私有方法

        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 AClass有一个私有方法

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

输出

1 个答案:

答案 0 :(得分:0)

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