Hallo,
Gibt es in .NET bzw. in C# optionale Parameter?
Ich meine nicht folgendes:
public void Add(string wert){}
public void Add(string wert,string wert2){}
sonder folgendes
(Pseudocode)
public void Add(string wert,optional string wert){}
Gruß Konstantin
Ja, entweder mit params oder halt die Methode überladen:
void Methode(string arg1);
void Methode(string arg1, string arg2);
Das kenne ich, aber was macht man bei Parameter mit unterschiedlichen Typen? Oder wenn ich eigene Bezeichnungen für die einzelnen Parameter haben will.
Ich will z.B. beim aufruf der Methode so vorgehen:
Testklasse.Add("Testwert1", ,"Testwert3");
in der Mitte ist ein Platzhalter.
params sind keine optionalen sondern variable Parameter. Bei optionalen Parametern sind Default-Werte vorgesehen, die der Compiler bei Weglassen eines aktuellen Parameters ersetzt.
Optionale Parameter können zu bösen, versteckten Fehlern in lose gekoppelten Systemen führen (Stichwort: Versionierungsproblem). Daher hat man in C# darauf verzichtet.
Original von svenson
params sind keine optionalen sondern variable Parameter. Bei optionalen Parametern sind Default-Werte vorgesehen, die der Compiler bei Weglassen eines aktuellen Parameters ersetzt.Optionale Parameter können zu bösen, versteckten Fehlern in lose gekoppelten Systemen führen (Stichwort: Versionierungsproblem). Daher hat man in C# darauf verzichtet.
warum müssen optionale parameter default Werte haben? in c++?
wier reden doch von .NET und c#, oder?
Wenn ich mich entschliesse einem mit params definierten parameter zu übergeben oder auch nicht ist das für mich optional = wahlweise.. (man kann den ja auch leer lassen)
letzlich auch egal, denn ich denke was kde05 sucht sind dann keine optionalen, sondern variable paramter 😉
Original von cadi
warum müssen optionale parameter default Werte haben? in c++?
wier reden doch von .NET und c#, oder?
Naja, da C# keine optionalen Parameter kennt, muss man sich ja auf eine Sprache beziehen, die es kann. C++ z.B.! 😉
Variable Parameter sind sicher ähnlich. Der Unterschied besteht darin, dass die Schnittstelle mehr oder weniger untypisiert ist (oder alle vom gleichen Typ) und der Aufgerufene zur Laufzeit (bei optionalen Parametern in C++ findet das zur Compile-Zeit statt) die default-Werte bestimmt. Damit wird das Versionierungsproblem übergangen.
In der Praxis sollte man eher die Finger von lassen. Sicher gibt es einige wenige Fälle, wo es Sinn macht. Ich würde immer dann von einem Einsatz absehen, wenn man innerhalb der Methode casten muss (noch schlimmer: Casting der Elemente auf verschiedene Typen). Die .NET-Funktionen, die params nutzen tun das nicht, sondern rufen schlicht object-Methoden wie ToString() auf.
Auch wenn es eine wenig mehr Tipparbeit kostet ist Überladung der "saubere" Weg. Da wo Überladungen keinen Sinn machen (beliebig viele Parameter), ist params angezeigt.