-1

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

正如我的问题标题所说,任何人都可以向我解释什么是界限(上限、下限、精确界限)以及它们如何通过示例在类型推断中发挥作用?

考虑简单的代码:

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

来电者称它为

func( 23 , 23.23 ); 

类型推断过程发生时的界限是什么以及推断过程如何使用它们?如果我提出的示例是微不足道的并且没有任何上限等,请包括您自己的示例来代表这个想法。

4

2 回答 2

5

在您的示例中,类型推断没有界限。如果你这样称呼它

 func( 23 , 23.23 ); 

那么类型的候选者将是intand doubleInt可以隐式转换为double但不能反之亦然,因此固定类型Tdouble. 这与边界无关,而是类型兼容性。

但是,如果你这样称呼它

func( new object() , 23.23 );

那么上限为Tobject下限为double。在这种情况下,固定类型T将是object.

Eric Lippert在博客文章我们如何确保方法类型推断终止?

Jon Skeet在他的精彩书籍 C# in Depth中详细描述了类型推断的过程9.4.3 两阶段类型推断。请仔细阅读他对清单9.11类型推断的描述

于 2013-01-16T17:51:51.390 回答
1

我不知道您所说的类型 bounds是什么意思,但在您的示例中,23is an int23.23是 double ,并且 anint可以自动转换为 a double。因此,由于编译器可以将两个参数视为相同的类型 ( double),因此它推断Tdouble

于 2013-01-16T17:46:10.357 回答