【发布时间】:2013-02-15 11:48:42
【问题描述】:
通过接口使用类而不是直接使用类有什么含义?
例如,当通过IList<Int32> 接口而不是直接使用List<Int32> 类来改变整数列表时。这是否会引入装箱转换、更多类型检查、空值检查、更多间接级别、虚拟调用、减少优化、防止方法内联?如果是这样,我该如何减轻其中的一些影响?
我正在编写一个库,我打算在其中的所有集合类都通过它们的接口使用。该库适用于可能希望在高性能环境中使用它的其他开发人员。
【问题讨论】:
-
如果您非常担心性能,为什么不使用数组而不是集合类
-
所以你宁愿不知道,只是盲目地使用数组......这是一种方式。我并没有很担心,只是想知道这些问题。只有这样,才能在特定情况下做出良好的评估。
-
因为信息是特定于 CLR 实现的,它可能会在未来的版本中发生变化,这不是 VM 的全部目的——抽象出你不应该依赖的细节
-
@Ankur:我不认为这是特定于实现的。 CLI 标准 (ECMA-335) 竭尽全力指定虚拟调度(
virtual、newslot/reuseslot、call/callvirt等)。