Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从具有Reflection.Emit的派生类调用基类中的私有方法_C#_Reflection.emit_Typebuilder - Fatal编程技术网

C# 从具有Reflection.Emit的派生类调用基类中的私有方法

C# 从具有Reflection.Emit的派生类调用基类中的私有方法,c#,reflection.emit,typebuilder,C#,Reflection.emit,Typebuilder,我正在寻找一种使用TypeBuilder从派生类中的基类调用私有方法的方法。我知道这可以通过简单地通过反射调用方法来实现,但尝试调用typebuilder生成的passthrough方法会导致MethodAccessException。有人找到了解决这个问题的方法吗?没有问题。你不允许调用私有方法——这就是为什么它们是私有的。事实上,当你拥有适当的信任时,你可以通过反射来做到这一点,这实际上是一个后门,而不是表明你应该能够通过其他方式做到这一点 如果可能的话,应该重新设计以避免调用私有方法。如果

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

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


如果可能的话,应该重新设计以避免调用私有方法。如果你一定要称之为“反射”,那就用“反射”——这一事实表明你处于一个丑陋的境地。

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


如果可能的话,应该重新设计以避免调用私有方法。如果你一定要调用它,请使用反射-反射的丑陋事实表明你处于一个丑陋的境地。

这个想法来自于需要快速将遗留代码置于单元测试之下,而无需立即重新设计。我很清楚这个功能破坏了封装,并不是说它是一个问题,我只是好奇,看看是否有可能。@ duld:如果它是为了测试,所以你的遗留代码在你的控制之下,我会考虑把它变成一个内部方法,有一些指示它通常是私有的,然后使用内部的VISILBUTO来从测试程序集访问它。除了保护测试类中的派生和调用方法外,我还经常使用两种解决方案,它们似乎工作得很好。我想我只是在寻找一种改变访问修饰符以适应测试的方法。这个想法来自于需要在单元测试下快速获得遗留代码,而无需立即重新设计。我很清楚这个功能破坏了封装,并不是说它是一个问题,我只是好奇,看看是否有可能。@ duld:如果它是为了测试,所以你的遗留代码在你的控制之下,我会考虑把它变成一个内部方法,有一些指示它通常是私有的,然后使用内部的VISILBUTO来从测试程序集访问它。除了保护测试类中的派生和调用方法外,我还经常使用两种解决方案,它们似乎工作得很好。我想我只是在寻找一种方法来改变访问修饰符以适应测试。