【发布时间】:2011-01-12 23:28:47
【问题描述】:
这对我来说似乎很奇怪,但我记得 Eric Lippert 评论 C# 无法(通过设计,或至少是约定,我认为)基于返回类型重载方法的线程,所以也许它以某种令人费解的方式与此有关。
是否有任何原因这不起作用:
public static T Test<T>() where T : new()
{
return new T();
}
// Elsewhere
SomeObject myObj = Test();
但这确实:
var myObj = Test<SomeObject>();
从某种角度来看,它们都很好,因为您没有重复自己(以非常小的方式),但这只是编译器的不同阶段吗?
【问题讨论】:
-
协方差/逆变?我认为您可能必须说明您所指的 C# 版本。 bit.ly/gG4Iis编辑:我错了; C++ 也不能基于返回类型重载。毕竟,返回类型可以完全省略,所以我认为编译器没有可靠的方法来检测正确的函数。
-
我假设在提出协变/逆变时,您正在处理返回类型解析;正如我想的那样,这几乎是一个红鲱鱼,但仍然值得一提。
标签: c# type-inference