In C # -Generika können wir eine Einschränkung für einen Typparameter deklarieren T
, um einen Standardkonstruktor zu haben, indem wir sagen where T : new()
. Es sind jedoch keine anderen Arten von Einschränkungen wie diese gültig - new(string)
zum Beispiel usw.
Was ist der Grund aus Sicht des Sprachdesigns und / oder der Implementierung?
Gibt es etwas in der Art und Weise, wie Konstruktoren arbeiten, oder in der Art und Weise, wie das Typsystem implementiert ist, das dies verbietet (oder zumindest erschwert)? Wenn ja, was ist das? Ich erinnere mich irgendwo zu lesen , die default(T)
kompiliert eigentlich new T()
für T : struct
. Hat es vielleicht damit zu tun?
Oder ist es einfach eine gestalterische Entscheidung, um die Sprache nicht zu kompliziert zu machen?
new(string)
ist keine Standard-Konstruktor-Einschränkung. Ihre Frage lautet gleichbedeutend mit "Warum gibt es keine Einschränkungen, die bestimmte Konstruktorsignaturen erfordern?" Sehr wahrscheinlich, weil eine solche Einschränkung nicht besonders nützlich wäre.