2010-08-14 4 views
10

Как я могу создать метод, имеющий значения по умолчанию для параметров?Параметры метода по умолчанию в C#

+1

возможно дубликат [Как вы можете использовать необязательные параметры в C#] (http://stackoverflow.com/ вопросы/199761/how-can-you-use-optional-parameters-in-c) –

ответ

6

Вы просто объявить их со значениями по умолчанию - они называются optional parameters:

public void myMethod(string param1 = "default", int param2 = 3) 
{ 
} 

Это было введено в C# 4.0 (так что вам нужно будет использовать Visual Studio 2010).

+0

@Ardman: OP может означать C# 4. – dalle

12

C# 4.0 позволяет использовать named and optional arguments:

public void ExampleMethod(
    int required, 
    string optionalstr = "default string", 
    int optionalint = 10 
) 

В предыдущих версиях вы могли simulate default parameters с помощью метода перегрузки.

14

Вы можете сделать это только в C# 4, который представил как named arguments and optional parameters:

public void Foo(int x = 10) 
{ 
    Console.WriteLine(x); 
} 

... 
Foo(); // Prints 10 

Обратите внимание, что значение по умолчанию должен быть постоянным - либо константа нормального времени компиляции (например, буквальное) или:

  • конструктор без параметров типа значения
  • default(T) для некоторого типа T

Также обратите внимание, что значение по умолчанию встроено в сборку вызывающего абонента (при условии, что вы опускаете соответствующий аргумент), поэтому, если вы измените значение по умолчанию, не перестраивая код вызова, вы все равно увидите старое значение.

Этот (и другие новые функции на C# 4) описаны во втором издании C# in Depth. (. Глава 13 в данном случае)

+0

Ссылка на 'C# in Depth' неверна. Сайт 'manning.com' возвращает файл PHP, который перенаправляется на веб-сайт, который нельзя загрузить. –

+1

@NikolayKostov: Humbug - приветливая программа, измененная некоторое время назад. Я включил здесь более простую ссылку. –

2

Простое решение перегрузить метод:

private void Foo(int length) 
{ 
} 

private void Foo() 
{ 
    Foo(20); 
} 
+0

Это все еще хорошее решение, даже в C# 4. Одно из преимуществ этого заключается в том, что значения по умолчанию встроены в вашу сборку, а не вызывающие; см. ответ Джона для более подробной информации. –

+0

@ Dan: Я все больше скептически отношусь к * реальному повреждению «вы не можете изменить значения по умолчанию» ... потому что для большинства кодов я ожидаю, что все приложение будет перекомпилировано в любом случае. Это то, о чем стоит знать, но я не думаю, что это действительно огромная проблема. –

+0

@ Jon, я склонен согласиться с вами, так как я думаю, что, вероятно, было бы плохой практикой полагаться на конкретные значения по умолчанию, в любом случае, поскольку это, по-видимому, указывает на то, что характер API изменился. Если это так, клиент, вероятно, все равно должен измениться. –

Смежные вопросы