Laden...

optionale Parameter in C#?

Erstellt von kde05 vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.568 Views
K
kde05 Themenstarter:in
108 Beiträge seit 2005
vor 17 Jahren
optionale Parameter in C#?

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

M
1.439 Beiträge seit 2005
vor 17 Jahren

Nein gibt es nicht.

308 Beiträge seit 2005
vor 17 Jahren

Doch, es geht:
params

(wie sollte sonst auch String.Format funktioneieren? da gibt es ja nicht 1000 overloads 😉

public void Add(params string[] werte ){}
T
243 Beiträge seit 2006
vor 17 Jahren

Ja, entweder mit params oder halt die Methode überladen:

void Methode(string arg1);
void Methode(string arg1, string arg2);
K
kde05 Themenstarter:in
108 Beiträge seit 2005
vor 17 Jahren

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.

369 Beiträge seit 2006
vor 17 Jahren

Geht nicht. Evtl. null übergeben...

S
8.746 Beiträge seit 2005
vor 17 Jahren

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.

308 Beiträge seit 2005
vor 17 Jahren

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 😉

49.485 Beiträge seit 2005
vor 17 Jahren
S
8.746 Beiträge seit 2005
vor 17 Jahren

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.