具有泛型和 ParamArray 参数的重载决策在 Visual Studio 2008 中会生成不同的结果。
重载决策的目标是尝试选择最合适的候选方法,该候选方法的形参应最为匹配传递给该方法的实参的类型。在本节的示例中,Sub1 在继承层次结构之中进行重载,并使用类型为 Integer 和 Short 的参数进行调用。
Visual Studio 2005 和 Visual Studio 2008 中的重载决策规则都指定直接匹配优于需要 ParamArray 参数的匹配。但是在使用 Visual Studio 2005 重载决策规则时,类型推理无法用于派生类 Class2 中的重载候选,因为 Y 不能同时为 Integer 和 Short,因而需要精确匹配。如果实参 sh 和 n 具有相同的类型,则 Class2 中的 Sub1 比 Class1 中的重载候选更为可取,因为后者有一个 ParamArray 形参。但是,由于这两个实参的类型不同,因此会改为选择 Class1 中的基类重载。T 会推断为 Integer,而 Short 扩大为 ParamArrayp。
Visual Studio 2008 使用一种新的算法,该算法选择的重载与 Visual Studio 2005 中选择的重载相同(除了在此特定情况下)。在 Visual Studio 2008 中,该算法在此示例中确定 Integer 为主导类型,因为 Short 扩大为 Integer。派生类中的类型参数 Y 推理为 Integer,而 Short 扩大为 Integer。因此,将调用派生类中的 Sub1。