Ich wollte nur wissen, warum versiegelte Klassen keine generischen Einschränkungen sein dürfen?Warum versiegelte Klassen dürfen keine generischen Einschränkungen sein?
Nehmen wir an, ich eine einfache Code-Snippet in C# haben als Gebrüll
public sealed class Base
{
public Base() { }
}
public class Derived<T>
where T : Base
{
public Derived() { }
}
Wenn ich die DerivedClass bin instanziieren ich bin immer ‚Base‘ ist keine gültige Einschränkung. Ein Typ, der als Einschränkung verwendet wird, muss eine Schnittstelle, eine nicht versiegelte Klasse oder ein Typparameter sein.
Meine Vermutung ist, dass er Code generiert. Es ist nicht so, dass der Code-Generator weiß, dass jemand an der Klasse "versiegelt" ist. – Gabe
Und natürlich durch ähnliche Logik können Sie "Objekt" nicht als Einschränkung verwenden, aus dem entgegengesetzten Grund; T wird bereits in Objekt konvertiert werden können, da nur Typen, die in Objekt konvertiert werden können, als Typargumente verwendet werden können, sodass die Einschränkung redundant wäre. –
@EricLippert Auch wenn es keinen funktionalen Nutzen hat. Es hat einen Wartungsvorteil, da Sie viel einfacher einen generischen Constraint-Typ auslagern können, als alle Instanzen der versiegelten Klasse innerhalb eines neuen Typs zu ersetzen. Wenn auch ein kleiner Vorteil, sehe ich nicht, warum man einen nicht versiegelten generischen Typ durchsetzen würde. – Measuring