Entwickler-Ecke

Sonstiges (.NET) - Parameter einer Methode frei lassen?


Vegeto - Mi 23.07.14 12:53
Titel: Parameter einer Methode frei lassen?
Hallo,

habe mal eine Frage, ob sowas überhaupt möglich ist.

Also ich habe eine Methode mit 4 Parameter erstellten, doch nur die ersten beiden sind Plicht Parameter, diese muss der benutzer ausfüllen, die anderen brauch er nur optional füllen. jetzt wollte ich wissen ob ich die Methode so einstellen kann das wenn er die Methode aufruft, dass wenn er die plichtfelder gefüllt hat, die anderen standartmäßig auf "" oder 0 setzt. Oder muss ich für die Methode Überladungen erstellen, mit jedem weiterem Parameter?

Beispiel:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public void myMethod(string plicht1, string plicht2, string optinal1, int optinal2)
{
// do Somethink
// Die Parameter werden alle verwendet...
}

//benutzung der Methode
// eiegntlich würde ich das so haben!
myMethod("PLICHT","Plicht!");
// doch so muss ich das machen
myMethod("PLICHT","Plicht!","",0)


Ist das überhaupt so möglich wie ich das will oder muss ich dann mit Überladungen arbeiten???

Liebe Grüße


Palladin007 - Mi 23.07.14 13:04

Überladung ist eine gängige Variante, aber es gibt auch die Möglichkeit der optionalen Parameter [http://msdn.microsoft.com/de-de/library/dd264739.aspx].
Allerdings müssen die trotzdem einen Wert bekommen, der wird dann nur als Standard-Wert fest gelegt, wobei das nur ein konstanter Wert sein darf.


C#-Quelltext
1:
2:
3:
4:
5:
public void myMethod(string plicht1, string plicht2, string optinal1 = "s"int optinal2 = 5)
{
    // do Somethink
    // Die Parameter werden alle verwendet...
}


Wie gesagt, es müssen Konstanten sein, oder null.


Th69 - Mi 23.07.14 13:09

Ab C# 4 kannst du Optionale Parameter [http://www.dotnetperls.com/optional-parameters] benutzen. Bei dir z.B.

C#-Quelltext
1:
public void myMethod(string pflicht1, string pflicht2, string optional1 = nullint optional2 = 0)                    

Bei vorigen Compiler-Versionen (nicht .NET-Versionen) geht es nur mittels Überladung.

Jedoch gibt es auch Nachteile bei den optionalen Parametern: The Future of C# (C# 4.0) [http://www.mycsharp.de/wbb2/thread.php?postid=3551892#post3551892] ff. (klar, jetzt keine Future mehr ;-)


Vegeto - Mi 23.07.14 13:45

Hi,

ahhh coole Sache. war mir nicht bewusst und dennoch kann ich die Variable beim methodenaufruf anpassen.


Danke...

lg


Ralf Jansen - Mi 23.07.14 14:38

An der Stelle ist es hilfreich zu wissen das es auch benannte Parameter gibt.
Was ist wenn du einen optionalen Parameter angeben willst den in der Signatur vorgehenden aber nicht.

Bei den gezeigten Beispielen wäre der Aufruf dann (optional1 wäre dann der definierte Default)


C#-Quelltext
1:
myMethod("pflicht1""pflicht2", optional2: 5);                    


Ist übrigens auch hilfreich wenn man boolesche Parameter hat deren Sinn sich sonst so schlecht ergeben. Da kann man dann den Parameternamen auch aus rein dokumentarischen Gründen angeben.
Aka

C#-Quelltext
1:
Methode(truefalsetruetruefalse);                    

Was machen die einzelnen Parameter? Da hilft natürlich der Name anstatt sich einen Wolf zu dokumentieren.