正如我的问题标题所说,任何人都可以解释我什么是界限(上界,下界,精确界限)以及他们如何在类型推理中扮演角色?
考虑简单的代码:
void func<T> ( T firstparam , T secondparam) { }
并且来电者称之为
func( 23 , 23.23 );
类型推断过程发生的界限是什么以及推理过程如何使用它们?如果我提出的例子是微不足道的,并且不会有任何上限等,请包含你自己的例子来表示这个想法。
答案 0 :(得分:5)
在您的示例中,类型推断没有界限。如果你称之为
func( 23 , 23.23 );
然后,类型的候选人将是int
和double
。 Int
可以隐式投放到double
但不反过来,因此T
的固定类型为double
。这与边界无关,但与类型兼容。
但是,如果你称之为
func( new object() , 23.23 );
然后T
的上限为object
,下限为double
。在这种情况下,T
的固定类型将为object
。
Eric Lippert描述界限是什么以及为什么他们在How do we ensure that method type inference terminates?
上的博客帖子中分隔下限,上限和精确界限Jon Skeet在其精彩的C#深度书中详细描述了 9.4.3两阶段类型推理中的类型推断过程。请仔细阅读他的描述,以便列出 9.11
的类型推断答案 1 :(得分:1)
我不知道类型边界的含义,但在您的示例中,23
是int
,23.23
是双倍的, int
可自动转换为double
。因此,由于编译器可以将两个参数视为相同类型(double
),因此它推断T
为double
。