考虑到为最大性能而编写的C#,有两种方法可以使用基类方法(注意:我们在这里讨论无状态类,没有字段,只有方法):
我喜欢选项A,因为它使关系更清晰。我想知道的是,如果所有这些基类方法都是非虚拟的,即在基类A中它们已经无法被覆盖,那么是否存在vtable调用?显然,"非虚拟"暗示没有,但如果有任何管理费用,我想知道。
答案 0 :(得分:1)
根据@HansPassant(非常感谢),
即使对实例方法的非虚拟调用也是精确的 相当于一个虚拟的电话。为一个非常好的放弃一点性能 保证,始终在调用站点引发NullReferenceException。 当Null为空时诊断NRE非常难看。
只有对静态方法的调用才是非虚拟的。这包括扩展方法btw。