Привет!
Можно ли описывать на C# ф-ции с дефолтовыми параметрами? То есть если я не задам этот параметр он автоматически примет какое то наперед заданное значение.
"Oxy" <5701@news.rsdn.ru> wrote in message news:484389@news.rsdn.ru... > Привет! > Можно ли описывать на C# ф-ции с дефолтовыми параметрами? То есть если я не задам этот параметр он автоматически примет какое то наперед заданное значение.
В принципе нет. Такие вещи делают через перегрузку:
Здравствуйте, Oxy, Вы писали:
Oxy>Привет! Oxy>Можно ли описывать на C# ф-ции с дефолтовыми параметрами? То есть если я не задам этот параметр он автоматически примет какое то наперед заданное значение.
Нельзя, но для этих целей можно использовать перегрузку
int DoSmth(string str)
{
DoSmt(str, 5);
}
int DoSmth(string str, int i)
{
Console.WriteLine(str + i.ToString());
}
То есть что бы использовать эту удобную возможность мне надо дублировать огромную кучу кода из=за 2-3 дополнительных строчек. Это разработчики так прикалываются?
Здравствуйте, Oxy, Вы писали:
Oxy>То есть что бы использовать эту удобную возможность мне надо дублировать огромную кучу кода из=за 2-3 дополнительных строчек. Это разработчики так прикалываются?
Здравствуйте, Oxy, Вы писали:
Oxy>То есть что бы использовать эту удобную возможность мне надо дублировать огромную кучу кода из=за 2-3 дополнительных строчек. Это разработчики так прикалываются?
Oxy>То есть что бы использовать эту удобную возможность мне надо дублировать огромную кучу кода из=за 2-3 дополнительных строчек. Это разработчики так прикалываются?
Помоему в Васике они есть. Но второй выход использование массивов параметров.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Igor Trofimov, Вы писали:
G>>считая что при равенстве параметра -1 используется значение по умолчанию:
iT>По-моему, это наихудшее решение. И ведет к неприятностям. iT>Ничего личного.
Это зависит от решаемой задачи.
Если рассматривать в широком смысле, то оно вообще не применимо.
Можно использовать второй способ решения, передавая размерный тип в ссылочном.
Oxy>То есть что бы использовать эту удобную возможность мне надо дублировать огромную кучу кода из=за 2-3 дополнительных строчек.
Не преувеличивай. По три строчки каждую на перегрузку. Ты же не собираешься отдельно реализовывать каждый раз функцию, просто вызываешь более конкретный вариант из более общего.
Здравствуйте, mihailik, Вы писали:
Oxy>>То есть что бы использовать эту удобную возможность мне надо дублировать огромную кучу кода из=за 2-3 дополнительных строчек.
M>Не преувеличивай. По три строчки каждую на перегрузку. Ты же не собираешься отдельно реализовывать каждый раз функцию, просто вызываешь более конкретный вариант из более общего.
Ну вообще то можно и так. Но все равно это, ИМХО, не удобно.
Re[5]: Default-параметры в ф-циях на C#
От:
Аноним
Дата:
22.12.03 10:31
Оценка:
Oxy>Но все равно это, ИМХО, не удобно.
По-моему, наоборот — вариант с перегрузкой логичнее. Если собираешься использовать функцию с параметрами по умолчанию, то по умолчанию, подразумевается, что ты должен знать, какие это значения. При перегрузке, никакой дополнительной информации не требуется — просто используется нужный набор параметров.
Re[2]: Default-параметры в ф-циях на C#
От:
Аноним
Дата:
22.12.03 10:51
Оценка:
Здравствуйте, Gerion, Вы писали:
G>Можно попробовать решить вашу проблему следующим образом, G>считая что при равенстве параметра -1 используется значение по умолчанию:
В качестве значения отсутствующего параметра по умолчанию (если уж понадобилось) можно (или нужно) использовать Type.Missing.
Здравствуйте, Gerion, Вы писали:
G>Можно попробовать решить вашу проблему следующим образом,
<skip>
Вы наверно не прняли в чем именно дело. Я просто не хочу явно передавать параметр если он мне не нужен.
Например
void do_something (int i, int j = 0)
Например я вызываю
do_something(1,1);
Тогда j принимает вполне конкретное значение 1.
или
do_something(1);
Тогда j принимает значение 0 (по умолчанию)
Это очень удобно. По крайней мере для меня. Я использовал эту возможность как в С++ так и Delphi и привык к ней.
Конечно, как в этом топике уже писали, можно применять перегрузку, но мне это не нравится. Не мешало бы разработчикам C# перенять эту возможность из С++ раз уж это С.
Здравствуйте, Oxy, Вы писали:
Oxy>Здравствуйте, Аноним, Вы писали:
А>>По-моему, наоборот — вариант с перегрузкой логичнее. Если собираешься использовать функцию с параметрами по
Oxy>Может и логичнее, но, отнюдь, не удобнее. ИМХО, конечно.
Пути Биловой команды неисповедимы.
Маємо те що маємо. Л.Кравчук:E... << RSDN@Home 1.1.2 beta 1 >>
Oxy>Конечно, как в этом топике уже писали, можно применять перегрузку, но мне это не нравится. Не мешало бы разработчикам C# перенять эту возможность из С++ раз уж это С.
Судя по всему, от этой возможности отказались вполне сознательно.
FL>Параметр по умолчанию очень удобен, когда добавляется параметр функции, и не хочется переписывать старый код.
Т.е., изменить сигнатуру функции и от души посмеяться над теми, у кого функция перестанет вызываться?
IMHO, пример создания потенциальных проблем на пустом месте — и всё из за трёх строчек кода?
Другое дело, если в функции 40 параметров, и каждый не обязателен. Как такое писать на шарпе — не представляю. Но надеюсь, никогда и не узнаю.
FL>Type.Missing этой проблемы не решает.
Вариант с Type.Missing не самый удобный, но позволяет избавиться от двусмысленности.