Die Typinferenz von C# vereinfacht die Variablendeklaration, indem sie es dem Compiler ermöglicht, Typen aus der Initialisierung abzuleiten. Allerdings fehlt diese hilfreiche Funktion für Konstrukteure, was Fragen zu ihrer Auslassung aufwirft.
Das Fehlen einer Konstruktortyp-Inferenz ist grundsätzlich kein grundlegender Designfehler. Es könnte implementiert werden, indem verfügbare Konstruktoren analysiert, Überladungen aufgelöst und die „beste“ Übereinstimmung ausgewählt werden. Die Herausforderung liegt in der Komplexität des Vergleichs von Konstruktoren verschiedener Typen und variierender generischer Parameter.
Das Haupthindernis ist der Kompromiss zwischen potenziellem Nutzen und Implementierungskosten. Das Hinzufügen dieser Funktion ist zwar praktisch, erfordert jedoch einen erheblichen Entwicklungsaufwand. Darüber hinaus besteht die Gefahr von Unklarheiten und Fehlern bei der Überlastungsauflösung.
Trotz dieser Einschränkung können Entwickler mit dem Factory-Muster ähnliche Ergebnisse erzielen. Eine dedizierte Factory-Klasse übernimmt die Objekterstellung und gibt nach Bedarf Typen an. Zum Beispiel:
<code class="language-csharp">public class MyTypeFactory { public static MyType<T> Create<T>(T value) { return new MyType<T>(value); } }</code>
Dies ermöglicht Typrückschlüsse während der Objekterstellung:
<code class="language-csharp">var myObj = MyTypeFactory.Create(42);</code>
Die Konstruktortyp-Inferenz war ein wiederkehrender Vorschlag, dessen Umsetzung jedoch aufgrund der Priorisierung anderer Funktionen noch aussteht. Es wurde kurzzeitig für C# 6 in Betracht gezogen, aber letztendlich während der Entwicklung ausgeschlossen.
Das Fehlen einer Konstruktortyp-Inferenz in C# ist zwar praktisch, aber auf praktische Bedenken und die Verfügbarkeit von Problemumgehungen wie dem Factory-Muster zurückzuführen. Entwickler müssen derzeit explizite Typdeklarationen oder alternative Strategien für die Objektinitialisierung verwenden.
Das obige ist der detaillierte Inhalt vonWarum verfügt C# nicht über Konstruktortyp-Inferenz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!