c# - 部分方法和覆盖基类中的虚拟方法之间的性能差异有多大?

标签 c# oop

我正在更新我的代码生成器,我可以选择是将方法 stub 实现为基类中的虚拟方法,还是在生成的代码中实现分部方法。两者在性能上有什么区别吗?

最佳答案

如果您实现分部方法,那么我希望不会有明显差异。 C# 始终使用 callvirt 来调用实例方法,即使它们不是虚拟的,因此不会有太大变化。

如果您实现分部方法,那么调用本身将被删除 - 因此永远不会有堆栈需要准备等。这将无限更快,这就是为什么生成的代码可以包含大量可笑的部分方法 stub :如果您不使用它们,它们就不存在。

使用分部方法的一个更重要的原因就是您不必对对象进行子类化。您不能在同一个类中声明虚拟方法的“抽象”/“虚拟”和“覆盖”部分(即使是部分的)。部分方法解决了这个问题,以及广告扩展点的问题(无需使用反射)。

非常适合代码生成工具;-p

关于c# - 部分方法和覆盖基类中的虚拟方法之间的性能差异有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/339054/

相关文章:

c# - 在 C# 中将 WriteableBitmap 转换为位图

c# - asp.net:发布应用程序后文本框消失

c# - 当我执行多个任务时,为什么 TaskCanceledException 没有存储在 Task.Exception 属性中?

c# - 具有采用不同泛型类的方法的泛型类

javascript - JS中如何避免重复的类定义

javascript 类对象,keyevent 中的方法不起作用

oop - 将规范化技术应用于对象建模

javascript - 如何使类的属性不区分大小写?

c# - CrossGeolocator 的 GetPositionAsync 不起作用

java - 没有反射是否可以确定要运行的类