Nur ein Gedanke.
Wäre es nicht nützlich, optionale Parameter in C # zu haben?
Dies würde das Leben einfacher machen. Ich habe es satt, mehrere Klassen mit demselben Namen, aber unterschiedlichen Typparametern zu haben. Auch VS unterstützt das nicht sehr vell (Dateinamen): -)
Dies würde zum Beispiel die Notwendigkeit eines nicht-generischen IEnumerable beseitigen:
%Vor%Was denkst du?
Ich bin definitiv dafür.
Ich schreibe gerade Hilfsmethoden für verschiedene Szenarien, in denen ich Verweise auf verschiedene Member und Klassenmethoden weitergeben möchte. Um dies zu erreichen, nehme ich zum Beispiel ein Expression<Func<TIn, TOut>>
als Argument für den Helfer (das erlaubt mir, die Methode mit einem Lambda-Ausdruck zu erreichen, wodurch alles stark typisiert bleibt).
ABER - Ich muss momentan eine neue Hilfsmethode für jede andere Anzahl von Eingabeargumenten definieren, da ich eine andere Menge von generischen Argumenten dafür haben muss. Anstelle von
%Vor%Ich könnte höchstens mit zwei Methoden auskommen:
%Vor%In meinem Fall würde es eine Menge Code-Duplizierung vermeiden ...
Was würde hauptsächlich für diese Sprachfunktion verwendet? Ich kann sehen, dass es bei einigen administrativen Aufgaben wie Dateinamen und weniger Tippen und dergleichen helfen könnte, aber darüber hinaus sehe ich nicht, wie nützlich das sein würde.
Außerdem würde diese Funktion alle generischen Constraints, die dem generischen Typparameter zugeordnet werden könnten, erheblich komplizieren, und der Standardtyp selbst müsste als eine Art generische Constraint selbst funktionieren.
Ich denke, das würde die Sprache komplizieren, ohne dem Entwickler einen wirklichen Vorteil zu bieten.
Es ist mir nicht klar, was genau Sie vorschlagen. Derzeit gibt es Typen mit dem gleichen Namen, aber unterschiedlichen Typparametern, die aber in keiner Weise durch Vererbung in Beziehung stehen - was würde Ihr Vorschlag dann tun?
Wenn außerdem die Basisklassenbibliothek von Grund auf neu entwickelt wurde, würde es höchstwahrscheinlich keine nicht generische IEnumerable-Schnittstelle geben - sie existiert nur, weil die CLR keine Generika unterstützte, als die Schnittstelle eingeführt wurde, und die generische Schnittstelle erbt nur davon, so dass Legacy-Code weiterhin funktioniert. Neu deklarierte Klassen werden für eine CLR erstellt, die Generics unterstützt, sodass das Problem nicht mehr relevant ist.
Ich bin kürzlich auf einen Fall gestoßen, der so etwas verwendet haben könnte, nur nicht ganz. Ich hatte eine Methode, die eine Art von Transformation zwischen Klasse A und der ihr zugeordneten Klasse AChild und Klasse B und Klasse BChild durchführt. Normalerweise war das Paar A / AChild dasselbe wie B / BChild, aber manchmal war A eine Basisklasse von B und AChild eine Basisklasse von BChild.
Es wäre schön gewesen, sagen zu können, dass mein Typparameter TB standardmäßig auf TA gesetzt wurde und dass TBChild standardmäßig auf TAChild gesetzt wurde.
Beachten Sie, dass dies eine Situation war, in der es notwendig war, die Typparameter auszugeben, da die Inferenz nicht funktionieren würde.