2010-10-12 7 views
47

Kann ich Standardparameter in C# angeben?Kann ich Parametern oder optionalen Parametern in C# -Funktionen einen Standardwert zuweisen?

In C:

void fun(int i = 1) 
{ 
    printf("%d", i); 
} 

Können wir Parameter einen Standardwert geben? Ist es in C# möglich? Wenn ja, können wir Überlastungsfunktionen vermeiden?

Es ist immer eine schlechte Übung, einen optionalen Parameter zu einer bestehenden Funktion hinzuzufügen. Wenn Sie an einem Projekt arbeiten, das die Klasse mit einer Funktion referenzieren muss und wir einen Parameter mit einem optionalen Wert geändert haben, kann es eine Laufzeitausnahme auslösen, dass die Methode nicht gefunden wird.

Dies ist, weil wir berücksichtigen, dass, wenn wir einen zusätzlichen optionalen Wert hinzufügen, keine Codeänderung erforderlich ist, wenn die Funktion an vielen Stellen verwendet wird.

Add(10, 10); 

Aber wenn wir einen optionalen Parameter wie folgt hinzufügen,

function Add(int a, int b, int c = 0); 

dann der Compiler

Add(10, 10, 0); 

erwartet:

function Add(int a, int b); 

Dies wird unter Verwendung von auf diese Weise aufgerufen werden Eigentlich rufen wir an wie diese Add(10, 10) und diese Funktion wird nicht in dieser Klasse verfügbar sein und verursacht eine Laufzeit Ausnahme.

Dies passiert, während ein neuer Parameter zu einer Funktion hinzugefügt wird, die von vielen Orten aufgerufen wird, und ich bin mir nicht sicher, dass dies jedes Mal passieren wird. Aber ich schlage vor, Sie überladen die Funktion.

Immer müssen wir die Methode überladen, die einen optionalen Parameter hat. Wenn Sie mit Funktionen arbeiten, die mehr als einen optionalen Parameter haben, ist es sinnvoll, den Wert mit dem Namen des Parameters zu übergeben.

function Add(int a, int b, int c = 0); 

Es ist immer gut, diese Funktion auf folgende Weise aufzurufen.

Add(10, 20, c:30); 
+1

Haben Sie es versucht? –

+1

Das ist C++, nicht C. – leppie

+0

Was Sie fragen? .. –

Antwort

55

das ist genau, wie Sie es in C#, aber wurde die Funktion zuerst hat dieses Bild .NET 4.0

+2

Es ist möglich, es in .NET zu verwenden. 3.5 –

+0

'Visual Studio 2010 +' hat 'msbuild' mit" multitargeting "-Funktion (https://msdn.microsoft.com/en-us/library/vstudio/ee395432(v= vs.100) .aspx). Es kann Target-Packs für '.NET 4.0' verwenden, um Ihre optionalen Parameter zu einer Gruppe von überladenen Methoden zu machen. – dbardakov

+0

Was ist mit Inline-Methoden (Func, Action, Delegate)? – EricG

5

in Ja, aber Sie müssen zu verwenden .NET 3.5 und C# 4.0 zu erhalten Funktionalität.

This MSDN page hat weitere Informationen.

26

Ja. Siehe Named and Optional Arguments. Beachten Sie, dass der Standardwert eine Konstante sein muss, so ist dies in Ordnung:

public string Foo(string myParam = "default value") // constant, OK 
{ 
} 

aber das ist nicht:

public void Bar(string myParam = Foo()) // not a constant, not OK 
{ 
} 
0

Dies ist eine Funktion von C# 4.0, aber es war nicht möglich, ohne Funktion Überlastung vor dieser Version.

26

Es ist nur ab C# 4 möglich.0

Wenn Sie jedoch eine Version von C#, vor 4.0 verwenden, können Sie dieses Problem umgehen, indem überladene Methoden verwenden:

public void Func(int i, int j) 
{ 
    Console.WriteLine (String.Format ("i = {0}, j = {1}", i, j)); 
} 

public void Func(int i) 
{ 
    Func (i, 4); 
} 

public void Func() 
{ 
    Func (5); 
} 

(Alternativ können Sie auf C# 4.0 offcourse Upgrade).

1

Diese Funktionalität ist ab C# 4.0 verfügbar - es wurde in Visual Studio 2010 eingeführt. Und Sie können es im Projekt für .NET 3.5 verwenden. Daher müssen alte Projekte in .NET 3.5 nicht auf .NET 4.0 aktualisiert werden.

Sie müssen nur Visual Studio 2010 verwenden, aber denken Sie daran, dass es Sprachversion auf dem Standard kompilieren soll (setzen Sie ihn in Projekt Eigenschaften-> Buid-> Erweitert ...)

This MSDN page weitere Informationen über optionale Parameter haben in VS 2010.

Verwandte Themen