Why Can't C# Constructors Inherit Type Inference from Generic Methods?
Jan 20, 2025 am 06:37 AMWhy can’t C# constructors inherit type inference from generic methods?
In C#, constructors lack the type inference capabilities of generic methods. For example, in the following code:
public class MyType<T> { private readonly T field; public MyType(T value) { field = value; } } var obj = new MyType(42); // 期望类型:MyType<int>
The compiler cannot infer that obj
is of type MyType<int>
. One solution is to use a factory class:
public class MyTypeFactory { public static MyType<T> Create<T>(T value) { return new MyType<T>(value); } } var myObj = MyTypeFactory.Create(42);
This raises questions about the reasons behind this restriction.
Is there a root cause?
There is no conclusive underlying reason preventing constructors from doing type inference. In contrast, identifying all relevant types and resolving overloads between constructors with different numbers of parameters requires a complex algorithm. Additionally, to ensure backward compatibility, non-generic constructors take precedence over inferred constructors.
Practical Obstacles: Weighing the Pros and Cons
Although type inference in constructors has a net benefit, this does not necessarily guarantee its implementation. A feature's viability depends on its relative value relative to other potential improvements, resource allocation, and compatibility issues.
Factory Pattern: A Clever Alternative
The factory method pattern provides an effective solution to the lack of constructor type inference. By introducing an additional layer of abstraction, type inference can be applied to factory methods to achieve similar results without modifying the constructor itself.
Changes that were never implemented
Although implementation was considered for C# 6, this proposed feature was ultimately removed from the final design. The fact that it was close to adoption highlighted its potential utility, but ultimately, other priorities prevailed.
The above is the detailed content of Why Can't C# Constructors Inherit Type Inference from Generic Methods?. For more information, please follow other related articles on the PHP Chinese website!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

What are the types of values returned by c language functions? What determines the return value?

What are the definitions and calling rules of c language functions and what are the

C language function format letter case conversion steps

Where is the return value of the c language function stored in memory?

How do I use algorithms from the STL (sort, find, transform, etc.) efficiently?

How does the C Standard Template Library (STL) work?
