【发布时间】:2010-10-30 03:32:20
【问题描述】:
当您从一个类派生并实例化子类时,运行时也会实例化超类,对吧?
既然抽象类不能被实例化,那么在子类被实例化时,它们不是由运行时创建的吗?
如果是这样,那么抽象类继承会比普通类实例更快吗?
【问题讨论】:
标签: c# .net performance inheritance class
当您从一个类派生并实例化子类时,运行时也会实例化超类,对吧?
既然抽象类不能被实例化,那么在子类被实例化时,它们不是由运行时创建的吗?
如果是这样,那么抽象类继承会比普通类实例更快吗?
【问题讨论】:
标签: c# .net performance inheritance class
运行时从不创建基类和派生类的单独实例 - 只是派生类实例还具有基类的所有变量等,并将基类构造函数运行为初始化的一部分。这里“普通”基类和抽象基类之间没有区别。
【讨论】:
我认为您对某些细节感到困惑。
当您构造一个对象时,该对象的类继承自另一个类,这不像您在内存中获得两个对象。
你只得到一个,但它为来自两者的字段留出了空间。
换句话说,如果原始类需要 10 个字节来保存其字段,而您的继承类需要 5 个字节来保存其特定字段,那么当您从继承的类构造对象时,它将占用 15 个字节,其中前 10 个对应于基类中的字段。 (请注意,这是一个非常简化的解释,还有更多内容决定了对象的实际大小)。
【讨论】: