Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.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# 在基类中,分部方法和重写虚方法之间的性能差异有多大?_C#_Oop - Fatal编程技术网

C# 在基类中,分部方法和重写虚方法之间的性能差异有多大?

C# 在基类中,分部方法和重写虚方法之间的性能差异有多大?,c#,oop,C#,Oop,我正在更新我的代码生成器,可以选择在基类中将方法存根实现为虚拟方法,还是在生成的代码中实现部分方法。这两种方法之间有性能差异吗?可能有细微的差异,但除非在循环中重复调用该方法,否则应该可以忽略不计 分部方法只是允许跨多个文件拆分类的语法糖 编译时,它们完全相同,就好像所有方法都在一个文件中一样。换句话说,使用分部方法可能看到的唯一“减速”是编译时间稍长:) 编辑:正如下面的答案所说,如果在编译过程中找不到它们,它们甚至不在那里。可能会有细微的区别,但除非在循环中重复调用该方法,否则应该可以忽略不

我正在更新我的代码生成器,可以选择在基类中将方法存根实现为虚拟方法,还是在生成的代码中实现部分方法。这两种方法之间有性能差异吗?

可能有细微的差异,但除非在循环中重复调用该方法,否则应该可以忽略不计

分部方法只是允许跨多个文件拆分类的语法糖

编译时,它们完全相同,就好像所有方法都在一个文件中一样。换句话说,使用分部方法可能看到的唯一“减速”是编译时间稍长:)


编辑:正如下面的答案所说,如果在编译过程中找不到它们,它们甚至不在那里。

可能会有细微的区别,但除非在循环中重复调用该方法,否则应该可以忽略不计

分部方法只是允许跨多个文件拆分类的语法糖

编译时,它们完全相同,就好像所有方法都在一个文件中一样。换句话说,使用分部方法可能看到的唯一“减速”是编译时间稍长:)

编辑:正如下面的答案所说,如果在编译过程中找不到它们,它们甚至不在其中。

如果实现分部方法,那么我希望不会有明显的区别。C#总是使用
callvirt
来调用实例方法,即使它们不是虚拟的,所以不会有太多变化

如果不实现分部方法,那么调用本身就会被删除——因此永远不会有堆栈要准备,等等。这将非常快,这就是为什么生成的代码可以包含数量惊人的分部方法存根的原因:如果不使用它们,它们就不存在

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

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

如果您实施分部方法,那么我希望不会有明显的差异。C#总是使用
callvirt
来调用实例方法,即使它们不是虚拟的,所以不会有太多变化

如果不实现分部方法,那么调用本身就会被删除——因此永远不会有堆栈要准备,等等。这将非常快,这就是为什么生成的代码可以包含数量惊人的分部方法存根的原因:如果不使用它们,它们就不存在

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

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