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
C# 接口与抽象性能#_C#_Oop_Interface_Abstract - Fatal编程技术网

C# 接口与抽象性能#

C# 接口与抽象性能#,c#,oop,interface,abstract,C#,Oop,Interface,Abstract,假设我有一个接口包含3个方法,即m1(),m2(),m3(),我有一个抽象类,它只包含抽象方法,即m1(),m2(),m3()。假设这个抽象类或接口将来不会改变。在这种情况下,我应该选择什么?为什么?它们中有哪一个性能更好吗?以最干净的方式编写代码,然后对其进行分析。如果它的性能不如您所希望的那么好,请找到瓶颈并修复它 接口和抽象类是不同的抽象机制。抽象类允许您在抽象类中执行一些工作,并调用需要在派生类中实现的抽象方法。接口还没有任何实现,但是一个类可以实现许多接口。如果您没有实现任何行为,只是

假设我有一个接口包含3个方法,即m1(),m2(),m3(),我有一个抽象类,它只包含抽象方法,即m1(),m2(),m3()。假设这个抽象类或接口将来不会改变。在这种情况下,我应该选择什么?为什么?它们中有哪一个性能更好吗?

以最干净的方式编写代码,然后对其进行分析。如果它的性能不如您所希望的那么好,请找到瓶颈并修复它

接口和抽象类是不同的抽象机制。抽象类允许您在抽象类中执行一些工作,并调用需要在派生类中实现的抽象方法。接口还没有任何实现,但是一个类可以实现许多接口。如果您没有实现任何行为,只是声明公共形状必须是什么,请使用接口


调用接口实现和抽象方法重写(或虚拟方法重写)在性能上几乎没有区别。事实上,上次我研究这个问题时,它们编译成了相同的IL。即使存在性能差异,与代码的其余部分相比也可以忽略不计。

您希望哪种性能更好?时间内存使用情况?我问你是因为你处于最好的位置来衡量你的自我,但如果你真的需要现在知道:请检查这个帖子:有一些链接和性能测试。通常的想法是,接口需要比抽象类更多的操作来解析被调用的方法。重写抽象方法的具体类方法比接口实现的性能要好一点。该接口需要通过存根进行额外的跳转,通常只需要一条JMP指令。很难回头看,一纳秒很难精确地描绘。接口的设计含义截然不同,这并不意味着它是一个应该由perf引导的任意选择。