与类型推理有关的界限是什么
本文关键字:界限 是什么 类型 推理 | 更新日期: 2023-09-27 17:53:35
可能重复:
谁最后决定了什么是泛型类型?
正如我的问题标题所说,有人能解释一下界限(上界、下界、精确界限(是什么吗?它们是如何通过例子在类型推理中发挥作用的
考虑简单代码:
void func<T> ( T firstparam , T secondparam) { }
主叫叫它
func( 23 , 23.23 );
当类型推理过程发生时,边界是什么?推理过程如何使用它们?。如果我给出的例子很琐碎,没有任何上限等,请包括你自己的例子,它将代表这个想法。
在您的示例中,类型推理没有界限。如果你把它叫做
func( 23 , 23.23 );
则类型的候选者将是int
和double
。Int
可以隐式地广播到double
,但不能反之亦然,因此T
的固定类型是double
。这与边界无关,而是与类型兼容性有关。
但是,如果你把它称为
func( new object() , 23.23 );
则T
的上界将是object
,下界将是double
。在这种情况下,T
的固定类型将是object
。
Eric Lippert在关于"如何确保方法类型推理终止"的博客文章中描述了什么是边界,以及为什么它们将下限、上限和精确边界分开?
Jon Skeet在他的精彩著作《深度C#》中在9.4.3两阶段类型推理中详细描述了类型推理的过程。请仔细阅读他对列出9.11
我不知道类型边界是什么意思,但在您的示例中,23
是int
,23.23
是双精度,int
可以自动转换为double
。因此,由于编译器可以将两个参数视为同一类型(double
(,因此可以推断出T
是double
。