C# 从具有Reflection.Emit的派生类调用基类中的私有方法
我正在寻找一种使用TypeBuilder从派生类中的基类调用私有方法的方法。我知道这可以通过简单地通过反射调用方法来实现,但尝试调用typebuilder生成的passthrough方法会导致MethodAccessException。有人找到了解决这个问题的方法吗?没有问题。你不允许调用私有方法——这就是为什么它们是私有的。事实上,当你拥有适当的信任时,你可以通过反射来做到这一点,这实际上是一个后门,而不是表明你应该能够通过其他方式做到这一点C# 从具有Reflection.Emit的派生类调用基类中的私有方法,c#,reflection.emit,typebuilder,C#,Reflection.emit,Typebuilder,我正在寻找一种使用TypeBuilder从派生类中的基类调用私有方法的方法。我知道这可以通过简单地通过反射调用方法来实现,但尝试调用typebuilder生成的passthrough方法会导致MethodAccessException。有人找到了解决这个问题的方法吗?没有问题。你不允许调用私有方法——这就是为什么它们是私有的。事实上,当你拥有适当的信任时,你可以通过反射来做到这一点,这实际上是一个后门,而不是表明你应该能够通过其他方式做到这一点 如果可能的话,应该重新设计以避免调用私有方法。如果
如果可能的话,应该重新设计以避免调用私有方法。如果你一定要称之为“反射”,那就用“反射”——这一事实表明你处于一个丑陋的境地。没有问题。你不允许调用私有方法——这就是为什么它们是私有的。事实上,当你拥有适当的信任时,你可以通过反射来做到这一点,这实际上是一个后门,而不是表明你应该能够通过其他方式做到这一点
如果可能的话,应该重新设计以避免调用私有方法。如果你一定要调用它,请使用反射-反射的丑陋事实表明你处于一个丑陋的境地。这个想法来自于需要快速将遗留代码置于单元测试之下,而无需立即重新设计。我很清楚这个功能破坏了封装,并不是说它是一个问题,我只是好奇,看看是否有可能。@ duld:如果它是为了测试,所以你的遗留代码在你的控制之下,我会考虑把它变成一个内部方法,有一些指示它通常是私有的,然后使用内部的VISILBUTO来从测试程序集访问它。除了保护测试类中的派生和调用方法外,我还经常使用两种解决方案,它们似乎工作得很好。我想我只是在寻找一种改变访问修饰符以适应测试的方法。这个想法来自于需要在单元测试下快速获得遗留代码,而无需立即重新设计。我很清楚这个功能破坏了封装,并不是说它是一个问题,我只是好奇,看看是否有可能。@ duld:如果它是为了测试,所以你的遗留代码在你的控制之下,我会考虑把它变成一个内部方法,有一些指示它通常是私有的,然后使用内部的VISILBUTO来从测试程序集访问它。除了保护测试类中的派生和调用方法外,我还经常使用两种解决方案,它们似乎工作得很好。我想我只是在寻找一种方法来改变访问修饰符以适应测试。