与类型推理有关的界限是什么

本文关键字:界限 是什么 类型 推理 | 更新日期: 2023-09-27 17:53:35

可能重复:
谁最后决定了什么是泛型类型?

正如我的问题标题所说,有人能解释一下界限(上界、下界、精确界限(是什么吗?它们是如何通过例子在类型推理中发挥作用的

考虑简单代码:

void func<T> ( T firstparam , T secondparam) { }

主叫叫它

func( 23 , 23.23 ); 

当类型推理过程发生时,边界是什么?推理过程如何使用它们?。如果我给出的例子很琐碎,没有任何上限等,请包括你自己的例子,它将代表这个想法。

与类型推理有关的界限是什么

在您的示例中,类型推理没有界限。如果你把它叫做

 func( 23 , 23.23 ); 

则类型的候选者将是intdoubleInt可以隐式地广播到double,但不能反之亦然,因此T的固定类型是double。这与边界无关,而是与类型兼容性有关。

但是,如果你把它称为

func( new object() , 23.23 );

T的上界将是object,下界将是double。在这种情况下,T的固定类型将是object

Eric Lippert在关于"如何确保方法类型推理终止"的博客文章中描述了什么是边界,以及为什么它们将下限、上限和精确边界分开?

Jon Skeet在他的精彩著作《深度C#》中在9.4.3两阶段类型推理中详细描述了类型推理的过程。请仔细阅读他对列出9.11

的类型推断的描述

我不知道类型边界是什么意思,但在您的示例中,23int23.23是双精度,int可以自动转换为double。因此,由于编译器可以将两个参数视为同一类型(double(,因此可以推断出Tdouble