Ich sehne mich nach diesen süßen optionalen Argumenten aus den Tagen, als ich in C ++ mehr programmiert habe. Ich weiß, dass sie in C # nicht existieren, aber meine Frage ist Warum .
Ich denke, dass das Überladen von Methoden ein schlechter Ersatz ist, der Dinge sehr schnell unordentlich macht.
%Vor%Ich verstehe einfach nicht, was die Argumentation ist. Der C # -Compiler würde offensichtlich kein Problem haben, dies zu unterstützen, nur Microsoft hat beschlossen, es nicht zu unterstützen.
Warum wollten sie, als C # entworfen wurde, keine optionalen Argumente unterstützen?
Wie Andrey sagt, hat C # 4 optionale Parameter und benannte Argumente. Es ist jedoch wichtig, darauf hinzuweisen, dass einer der Bedenken, die Anders dazu veranlassten, sie nur von Anfang an einzuschließen - nämlich dass der Standardwert (der eine Konstante sein muss) in den aufrufenden Code eingebettet wird immer noch anwesend. Mit anderen Worten, es ist das gleiche Problem wie die öffentlich zugänglichen const
-Werte von C # 1.
Es ist noch nicht da, aber es ist in C # 4. Das hat hauptsächlich mit Kosten zu tun, und wie gut das Feature zu den wichtigsten neuen Teilen der Sprache passt (wie Generics in .Net 2 oder linq in 3). Optionale Argumente passen mit dem neuen dynamischen Zeug, das in Version 4 kommt, wurden also aufgenommen.
Um Eric Lippert zu zitieren (der selbst Eric Gunnerson ) warum viele scheinbar gute Features nicht enthalten sind:
(1) Dies ist kein subtraktiver Prozess; Wir fangen nicht mit C ++ oder Java oder Haskell an und entscheiden dann, ob wir einige Funktionen auslassen sollen. Und (2) einfach ein gutes Feature zu sein ist nicht genug. Die Funktionen müssen so überzeugend sein, dass sie die enormen Kosten von Design, Implementierung, Test, Dokumentation und Versand des Features rechtfertigen. Sie müssen sich die Mühe kosten, die Sprache zu komplizieren und die Entwicklung anderer Funktionen in der Zukunft zu erschweren.
Optionale Argumente sind nicht so einfach, wie sie aussehen. Sie können komplexe Probleme bekommen, wenn Sie überladene Methoden haben, die alle optionale Argumente haben. Die Auflösungsregeln können sehr schnell sehr kompliziert werden. Ich denke, für die erste Version von C # gab es keine gute Lösung, also übersprungen sie die optionalen Parameter.
Aber Sie wissen wahrscheinlich, dass C # 4.0 optionale und benannte Argumente haben wird, also scheint es im Allgemeinen keine schlechte Idee zu sein! ; -)
Tags und Links c# language-design