【问题标题】:Calling private method in BaseClass from a derived class with Reflection.Emit使用 Reflection.Emit 从派生类调用 BaseClass 中的私有方法
【发布时间】:2013-08-20 18:36:06
【问题描述】:

我正在寻找一种使用 TypeBuilder 从派生类中的基类调用私有方法的方法。我知道这可以通过简单地通过反射调用方法来完成,但尝试调用使用 typebuilder 生成的传递方法会导致 MethodAccessException。有没有人找到解决这个问题的方法?

【问题讨论】:

    标签: c# reflection.emit typebuilder


    【解决方案1】:

    没有“问题”。你不能调用私有方法——这就是为什么它们是私有的。当您获得适当的信任时,您可以通过反思来做到这一点,这一事实实际上是一个后门,而不是表明您应该能够以其他方式做到这一点。

    如果可能全部,您应该重新设计以避免调用私有方法的愿望。如果您绝对必须调用它,请使用反射 - 丑陋的事实表明您处于丑陋的境地。

    【讨论】:

    • 这个想法来自于需要在单元测试下快速获取遗留代码而不需要立即重新设计。我很清楚这个功能打破了封装,并不是说它是一个问题,我只是想看看它是否可能。
    • @dSquared:如果它用于测试(因此您的遗留代码在您的控制之下),我会考虑将其设为 internal 方法(有一些迹象表明它通常是私有的)然后使用InternalsVisibleTo 从测试程序集访问它。
    • 除了保护方法(在测试类中派生和调用)外,这是我经常使用的两种解决方案,而且看起来效果很好。我想我只是在寻找一种方法来改变访问修饰符以适应测试。
    猜你喜欢
    • 2013-12-26
    • 2015-01-04
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    相关资源
    最近更新 更多