Параметры метода по умолчанию в C#

Как я могу заставить метод иметь значения по умолчанию для параметров?


person Mehdei    schedule 14.08.2010    source источник
comment
возможный дубликат Как вы можете использовать необязательные параметры в C#?   -  person Hans Passant    schedule 14.08.2010


Ответы (4)


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

private void Foo(int length)
{
}

private void Foo()
{
    Foo(20);
}
person Kobi    schedule 14.08.2010
comment
Это по-прежнему хорошее решение, даже в C# 4. Одним из преимуществ этого является то, что значения по умолчанию встроены в вашу сборку, а не в вызывающую; см. ответ Джона для более подробной информации. - person Dan Bryant; 14.08.2010
comment
@Dan: я все больше скептически отношусь к реальному ущербу из-за того, что вы не можете изменить значения по умолчанию ... потому что для большей части кода я ожидаю, что все приложение будет перекомпилировано в любом случае. Об этом стоит знать, но я не думаю, что это действительно огромная проблема. - person Jon Skeet; 14.08.2010
comment
@Jon, я склонен согласиться с вами, так как я думаю, что было бы плохой практикой полагаться на определенные значения по умолчанию, в любом случае, поскольку это может указывать на то, что характер API изменился. Если это так, клиент, вероятно, все равно должен измениться. - person Dan Bryant; 14.08.2010

Вы можете сделать это только в C# 4, в котором представлены как именованные аргументы, так и необязательные параметры< /а>:

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

...
Foo(); // Prints 10

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

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

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

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

person Jon Skeet    schedule 14.08.2010
comment
Ссылка на C# in Depth книгу неверна. Веб-сайт manning.com возвращает файл PHP, который перенаправляет на веб-сайт, который не может быть загружен. - person Nikolay Kostov; 21.07.2015
comment
@NikolayKostov: Обман - партнерская программа давно изменилась. Я включил здесь более простую ссылку. - person Jon Skeet; 21.07.2015

C# 4.0 позволяет использовать именованные и необязательные аргументы:

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

В предыдущих версиях можно было имитировать параметры по умолчанию, используя перегрузка метода.

person Darin Dimitrov    schedule 14.08.2010

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

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

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

person Oded    schedule 14.08.2010