可能重复:
谁实际上最后决定什么是通用类型?
正如我的问题标题所说,任何人都可以向我解释什么是界限(上界,下界,精确界限)以及他们如何在类型推理中扮演角色?
考虑简单的代码:
void func<T> ( T firstparam , T secondparam) { }
Run Code Online (Sandbox Code Playgroud)
和来电者打电话
func( 23 , 23.23 );
Run Code Online (Sandbox Code Playgroud)
类型推断过程发生了什么以及推理过程如何使用它们的界限是什么?如果我提供的示例是微不足道的并且没有任何上限等,请包含您自己的示例,它将代表该想法.
在您的示例中,类型推断没有界限.如果你这样称呼它
func( 23 , 23.23 );
Run Code Online (Sandbox Code Playgroud)
那么类型的候选人将是int和double.Int可以隐式地进行double但不反过来,所以固定类型T是double.这与边界无关,但与类型兼容.
但是,如果你称之为
func( new object() , 23.23 );
Run Code Online (Sandbox Code Playgroud)
然后上限T将是object,下限将是double.在这种情况下固定类型T将是object.
Eric Lippert描述了边界是什么以及为什么它们在blogpost上分离下限,上限和精确边界我们如何确保方法类型推断终止?
Jon Skeet 在其精彩的C#深度书中详细描述了9.4.3两阶段类型推理的类型推断过程.请仔细阅读他对9.11列表类型推断的描述