Heim >Backend-Entwicklung >C++ >Warum erlaubt C# keine generischen Attributtypen?
C# bietet umfassende Anpassungsmöglichkeiten, schließt jedoch insbesondere generische Attributtypen aus. Diese Einschränkung wirft die Frage auf: Warum?
Der Versuch, ein benutzerdefiniertes Attribut mit einem generischen Typparameter zu definieren, führt zu einem Fehler bei der Kompilierung, z. B.:
<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { } [Validates<string>] public static class StringValidation { }</code>
Obwohl die Common Language Infrastructure (CLI) generische Attribute unterstützt, lässt C# sie ausdrücklich nicht zu. Dies ist keine CLI-Einschränkung, sondern eine interne C#-Designentscheidung.
Es erweist sich als schwierig, den genauen Grund für dieses Verbot herauszufinden. Die C#-Sprachspezifikation bietet keine klare Erklärung. Allerdings deuten Community-Diskussionen und Expertenmeinungen auf mehrere Möglichkeiten hin.
Eine Theorie geht davon aus, dass generische Attributtypen die Sprache und den Compiler unnötig komplex machen würden. Die Unterstützung dieser Funktion würde zusätzliche Sprachmechanismen und Compiler-Optimierungen erfordern, um Stabilität und Leistung aufrechtzuerhalten.
Eine andere Perspektive ist, dass die praktischen Anwendungen generischer Attribute begrenzt sind und die Entwicklungskosten die potenziellen Vorteile überwiegen. Die C#-Designer haben möglicherweise anderen Funktionen Priorität eingeräumt.
Eric Lippert, ein ehemaliges C#-Teammitglied, lieferte eine prägnante Erklärung: Die Einschränkung besteht, um unnötige Komplexität sowohl in der Sprache als auch im Compiler für eine Funktion mit begrenztem praktischen Wert zu vermeiden. Diese Erkenntnis ist zwar nicht ganz zufriedenstellend, wirft aber Licht auf den Entscheidungsprozess hinter den Designentscheidungen von C#.
Das obige ist der detaillierte Inhalt vonWarum erlaubt C# keine generischen Attributtypen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!