C# 构造函数为何无法继承泛型方法的类型推断?
在 C# 中,构造函数缺乏泛型方法所拥有的类型推断能力。例如,在以下代码中:
<code class="language-csharp">public class MyType<T> { private readonly T field; public MyType(T value) { field = value; } } var obj = new MyType(42); // 期望类型:MyType<int></code>
编译器无法推断 obj
的类型为 MyType<int>
。一种解决方法是使用工厂类:
<code class="language-csharp">public class MyTypeFactory { public static MyType<T> Create<T>(T value) { return new MyType<T>(value); } } var myObj = MyTypeFactory.Create(42);</code>
这引发了对这种限制背后原因的疑问。
是否存在根本原因?
并没有决定性的根本原因阻止构造函数进行类型推断。相反,识别所有相关类型并在具有不同参数个数的构造函数之间解析重载需要一个复杂的算法。此外,为了确保向后兼容性,非泛型构造函数优先于推断出的构造函数。
实际障碍:权衡利弊
尽管构造函数中的类型推断具有净收益,但这并不一定保证其实现。一项功能的可行性取决于其与其他潜在改进、资源分配和兼容性问题的相对价值。
工厂模式:巧妙的替代方案
工厂方法模式为缺乏构造函数类型推断提供了一种有效的解决方法。通过引入额外的抽象层,类型推断可以应用于工厂方法,从而在不修改构造函数本身的情况下达到类似的结果。
从未实现的变更
尽管在 C# 6 中考虑过实现,但该提议的功能最终从最终设计中删除。它接近被采用的事实突显了其潜在的实用性,但最终,其他优先事项占了上风。
以上是为什么 C# 构造函数不能从泛型方法继承类型推断?的详细内容。更多信息请关注PHP中文网其他相关文章!