C#中继承的性能考虑

Olh*_*sky 10 c# performance inheritance

如果我使用public int I;(或任何其他字段)创建一个类来创建一个继承自具有的基类的类,编译器是否会生成相同的IL public int I;

无论哪种方式,结果类的行为都相同,但编译器的行为是否相同?

即,编译器只是将代码从基类复制粘贴到派生类中,还是在继承时实际创建了两个不同的类对象?

class A
{
    public int I;
}

class B : A
{
}
Run Code Online (Sandbox Code Playgroud)

现在以下两个DoSomething()调用之间有任何性能差异吗?

var a = new A();
var b = new B();
DoSomething(a.I);
DoSomething(b.I); // Is this line slower than the above line due to inheritance?
Run Code Online (Sandbox Code Playgroud)

尝试忽略编译器可能针对此特殊情况执行的任何优化.我的问题是关于C#中的继承是否具有相关的性能损失.大多数时候我不在乎,但有时我想优化一段高频代码.

Mar*_*ell 10

编译器发出的是相同的; 实际上,即使在它使用的密封类上调用非虚拟实例方法时Callvirt- 这与调用任何具有多态性的方法一样.

不,它不是复制/粘贴 - 您编写的代码A仍然是其中的一部分A.不,你只是因为继承而得不到2个对象.它结合了这种行为 ; 实例B 也有从实现A-而不是通过复制粘贴:一个B 也是一个A-即Dog也是Mammal

  • @Olhovsky以最可衡量的方式,是的; 内联可能会有一些细微之处,但没有什么可以让人兴奋的.哦,并且"不从任何类继承" - 任何类都继承自`object`这是一个类. (2认同)