【问题标题】:Breaking the rules of encapsulation by Reflection [duplicate]通过反射打破封装规则[重复]
【发布时间】:2015-11-09 09:22:31
【问题描述】:

我最近阅读了反射的整个概念,我知道使用这种 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();

AClass 有一个私有方法

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

输出:

是的

【问题讨论】:

标签: c# reflection


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 2018-02-08
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2019-01-06
    相关资源
    最近更新 更多