Heim >Backend-Entwicklung >C++ >Warum sind generische Typen in C# nicht als Attributbasistypen zulässig?
C# lässt keine generischen Typen als Attributbasistypen zu. Der Versuch, dies zu tun, führt, wie unten gezeigt, zu einem Fehler bei der Kompilierung:
<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { } [Validates<string>] public static class StringValidation { }</code>
Diese Einschränkung ist trotz der umfangreichen generischen Unterstützung von C# für viele rätselhaft.
Die CLI-Spezifikation verbietet generische Attribute nicht ausdrücklich. Eine direkte IL-Untersuchung zeigt jedoch, dass ihre Entstehung möglich ist. Dies weist auf die Einschränkung hin, die ihren Ursprung in der C#-Sprache selbst hat.
Weder die C#-3-Spezifikation (Abschnitt 10.1.4) noch die ECMA-C#-2-Spezifikation bieten eine klare Erklärung für dieses Verbot, obwohl andere Attributbeschränkungen dokumentiert sind.
Eric Lippert, eine führende Persönlichkeit in der C#-Community, schlägt vor, dass die Einschränkung sowohl die Sprache als auch ihren Compiler vereinfacht. Die wahrgenommenen Vorteile der Zulassung generischer Attribute werden im Vergleich zu den potenziellen Komplexitäten, die sie mit sich bringen könnten, als unbedeutend erachtet.
Das obige ist der detaillierte Inhalt vonWarum sind generische Typen in C# nicht als Attributbasistypen zulässig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!