【发布时间】:2024-05-03 20:55:02
【问题描述】:
在性能方面哪个更好:
1.)通过基类的引用引用一个对象
abstract class BaseClass{}
class A : BaseClass{}
class B : BaseClass{}
static void Main(){
BaseClass objectInstance = new A();
objectInstance = new B();
}
或
2.) 通过接口的引用引用对象:
interface IBase{}
class A : IBase{}
class B : IBase{}
static void Main(){
IBase objectInstance = new A();
objectInstance = new B();
}
【问题讨论】:
-
这将是超级容易让你测试自己。与运行一个简单的基准测试相比,您可能需要更多时间来正确编写和格式化这个问题。
-
这段代码没有任何后果,重要的是你接下来要做什么。接口方法调用确实有一些开销,它必须通过调用存根,并且抖动优化器不能内联该方法。性能差异很难准确测量,它是非常快的代码,并且通过使非接口方法完全消失来很容易弄乱基准。接口是一种结构化的设计模式,你既不能选择加入它们,也不能仅仅为了它而随意丢弃它们。由 CLR 进行了大量的微优化,它们并不糟糕。
标签: c# performance interface reference abstract-class