Hallo zusammen,
ich glaube, ich habe noch nicht ganz verstanden, wann ich
bei unterschiedlichen Parameter einer Methode
public void DoSomething(long x) {}
public void DoSomething(long x, long y) {}
public void DoSomething(long x, long y = 0) {}
verwende.
Bei beiden Techniken muss ich die beiden Fälle abdecken, daß y verwendet wird oder nicht. Tatsächlich fällt es mir momentan schwer, mich für eine der beiden Techniken zu entscheiden.
Ein keiner Tipp wäre ganz hilfreich.
Vielen Dank und viele Grüße
Frank
Wenn der Code der gleiche ist, dann sind optionale Parameter besser geeignet. Bei unterschiedlichem Code die Überladung.
Weeks of programming can save you hours of planning
Zu beachten ist halt, dass ein Default-Parameter keine zweite Methode erzeugt, sondern effektiv nur die Methode mit x
und y
existiert.
An allen Stellen, wo nur das x
übergeben wird, schreibt der Compiler fix den Standardwert (hier: 0) in den Aufruf rein.
Ist im gleichen Assembly wurscht, kann über Assembly-Grenzen hinweg aber bedeuten dass sich Aufrufe unterschiedlich verhalten können (wenn du beispielsweise den Standardwert änderst aber die aufrufenden Stellen nicht neu kompilierst; wo dann noch der alte Wert reingebacken ist...)
Noch dazu:
Überladungen verwendet man auch oft um die Abwärtskompatibilität aufrecht zu erhalten, bei Erweiterungen oder dergleichen.
Das was @Bhaal sagt ist auch wichtig, ich denke ++noch ++dazu zu sagen:
Wenn du versuchst überladene Methoden zu ändern, indem sie stattdessen optionale Parameter aktzeptieren (oder umgekehrt) ist es eine Änderung der Methodenstruktur, mit dem fremde Assemblies, wenn sie nicht neu erstellt werden, nicht umgehen können, da sie die Methode auf einmal nicht mehr finden.
_MethodNotFoundException _heißt glaub ich das Zauberwort...
Da muß man aufpassen.
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄