Default-параметры в ф-циях на C#
От: Oxy  
Дата: 19.12.03 11:27
Оценка: 3 (1) +1
Привет!
Можно ли описывать на C# ф-ции с дефолтовыми параметрами? То есть если я не задам этот параметр он автоматически примет какое то наперед заданное значение.
Re: Default-параметры в ф-циях на C#
От: Воронков Василий Россия  
Дата: 19.12.03 11:29
Оценка: +1
"Oxy" <5701@news.rsdn.ru> wrote in message news:484389@news.rsdn.ru...
> Привет!
> Можно ли описывать на C# ф-ции с дефолтовыми параметрами? То есть если я не задам этот параметр он автоматически примет какое то наперед заданное значение.

В принципе нет. Такие вещи делают через перегрузку:

void A(object o1, object o2)
{
}

void A(object o1)
{
A(o1, <default_o2>);
}
Posted via RSDN NNTP Server 1.8 beta
Re: Default-параметры в ф-циях на C#
От: SiAVoL Россия  
Дата: 19.12.03 11:31
Оценка: 13 (1) +1
Здравствуйте, Oxy, Вы писали:

Oxy>Привет!

Oxy>Можно ли описывать на C# ф-ции с дефолтовыми параметрами? То есть если я не задам этот параметр он автоматически примет какое то наперед заданное значение.

Нельзя, но для этих целей можно использовать перегрузку
int DoSmth(string str)
{
    DoSmt(str, 5);
}

int DoSmth(string str, int i)
{
    Console.WriteLine(str + i.ToString());
}
... << RSDN@Home 1.1.2 beta 2 >>
Re[2]: Default-параметры в ф-циях на C#
От: Oxy  
Дата: 19.12.03 11:44
Оценка: +2
Здравствуйте, SiAVoL, Вы писали:

SAV>Нельзя, но для этих целей можно использовать перегрузку

SAV>
SAV>int DoSmth(string str)
SAV>{
SAV>    DoSmt(str, 5);
SAV>}

SAV>int DoSmth(string str, int i)
SAV>{
SAV>    Console.WriteLine(str + i.ToString());
SAV>}
SAV>


То есть что бы использовать эту удобную возможность мне надо дублировать огромную кучу кода из=за 2-3 дополнительных строчек. Это разработчики так прикалываются?
Re[3]: Default-параметры в ф-циях на C#
От: Dr_Sh0ck Беларусь  
Дата: 19.12.03 11:57
Оценка: :)
Здравствуйте, Oxy, Вы писали:

Oxy>То есть что бы использовать эту удобную возможность мне надо дублировать огромную кучу кода из=за 2-3 дополнительных строчек. Это разработчики так прикалываются?


Они еще и не так могут
Do not fake yourself ;)
ICQ#: 198114726
Re[3]: Default-параметры в ф-циях на C#
От: SiAVoL Россия  
Дата: 19.12.03 12:06
Оценка:
Здравствуйте, Oxy, Вы писали:

Oxy>То есть что бы использовать эту удобную возможность мне надо дублировать огромную кучу кода из=за 2-3 дополнительных строчек. Это разработчики так прикалываются?


В этом
Автор: nap2k
Дата: 22.07.03
топике активно обсуждали этот вопрос
... << RSDN@Home 1.1.2 beta 2 >>
Re: Default-параметры в ф-циях на C#
От: Gerion Россия http://agents.russia.webmatrixhosting.net
Дата: 19.12.03 16:28
Оценка: -3
Можно попробовать решить вашу проблему следующим образом,
считая что при равенстве параметра -1 используется значение по умолчанию:

        public void GetItem(int param1, int param2, int param3)
        {
            if(param1 == -1) param1 = 10;
            if(param2 == -1) param2 = 10;
            if(param3 == -1) param3 = 10;
                        .......................................................
        }


Для ссылочных параметров можно в данном случае использовать сравнение с null:


                public class MyClass
                {
                        public int x;
                }

                public void GetItem2(MyClass param1,MyClass param2,MyClass param3)
                {
                        if(param1 == null) 
                        {
                                param1 = new MyClass();
                                param1.x = 10;
                        }
                        if(param2 == null) 
                        {
                                param2 = new MyClass();
                                param2.x = 10;
                        }
                        if(param3 == null) 
                        {
                                param3 = new MyClass();
                                param3.x = 10;
                        }
                        .............................
                }
Re[2]: Default-параметры в ф-циях на C#
От: Igor Trofimov  
Дата: 19.12.03 16:34
Оценка: 1 (1) -1
G>считая что при равенстве параметра -1 используется значение по умолчанию:

По-моему, это наихудшее решение. И ведет к неприятностям.
Ничего личного.
Re[3]: Default-параметры в ф-циях на C#
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 19.12.03 16:35
Оценка:
Здравствуйте, Oxy, Вы писали:



Oxy>То есть что бы использовать эту удобную возможность мне надо дублировать огромную кучу кода из=за 2-3 дополнительных строчек. Это разработчики так прикалываются?


Помоему в Васике они есть. Но второй выход использование массивов параметров.
и солнце б утром не вставало, когда бы не было меня
Re[3]: Default-параметры в ф-циях на C#
От: Gerion Россия http://agents.russia.webmatrixhosting.net
Дата: 19.12.03 16:41
Оценка: -1
Здравствуйте, Igor Trofimov, Вы писали:

G>>считая что при равенстве параметра -1 используется значение по умолчанию:


iT>По-моему, это наихудшее решение. И ведет к неприятностям.

iT>Ничего личного.

Это зависит от решаемой задачи.
Если рассматривать в широком смысле, то оно вообще не применимо.
Можно использовать второй способ решения, передавая размерный тип в ссылочном.
Re[3]: Default-параметры в ф-циях на C#
От: mihailik Украина  
Дата: 22.12.03 09:15
Оценка:
Oxy>То есть что бы использовать эту удобную возможность мне надо дублировать огромную кучу кода из=за 2-3 дополнительных строчек.

Не преувеличивай. По три строчки каждую на перегрузку. Ты же не собираешься отдельно реализовывать каждый раз функцию, просто вызываешь более конкретный вариант из более общего.
... << RSDN@Home 1.1.0 stable >>
Re[4]: Default-параметры в ф-циях на C#
От: Oxy  
Дата: 22.12.03 09:24
Оценка: +1
Здравствуйте, 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.
Re[6]: Default-параметры в ф-циях на C#
От: Oxy  
Дата: 22.12.03 10:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>По-моему, наоборот — вариант с перегрузкой логичнее. Если собираешься использовать функцию с параметрами по


Может и логичнее, но, отнюдь, не удобнее. ИМХО, конечно.
Re[2]: Default-параметры в ф-циях на C#
От: Oxy  
Дата: 22.12.03 11:10
Оценка:
Здравствуйте, Gerion, Вы писали:

G>Можно попробовать решить вашу проблему следующим образом,


<skip>

Вы наверно не прняли в чем именно дело. Я просто не хочу явно передавать параметр если он мне не нужен.

Например
void do_something (int i, int j = 0)


Например я вызываю
do_something(1,1);

Тогда j принимает вполне конкретное значение 1.
или
do_something(1);

Тогда j принимает значение 0 (по умолчанию)
Это очень удобно. По крайней мере для меня. Я использовал эту возможность как в С++ так и Delphi и привык к ней.
Конечно, как в этом топике уже писали, можно применять перегрузку, но мне это не нравится. Не мешало бы разработчикам C# перенять эту возможность из С++ раз уж это С.
Re[7]: Default-параметры в ф-циях на C#
От: Stoune  
Дата: 25.12.03 02:02
Оценка:
Здравствуйте, Oxy, Вы писали:

Oxy>Здравствуйте, Аноним, Вы писали:


А>>По-моему, наоборот — вариант с перегрузкой логичнее. Если собираешься использовать функцию с параметрами по


Oxy>Может и логичнее, но, отнюдь, не удобнее. ИМХО, конечно.


Пути Биловой команды неисповедимы.
Маємо те що маємо. Л.Кравчук:E... << RSDN@Home 1.1.2 beta 1 >>
Re[3]: Default-параметры в ф-циях на C#
От: Ransom Stark Россия  
Дата: 25.12.03 08:44
Оценка: +1
Oxy>Конечно, как в этом топике уже писали, можно применять перегрузку, но мне это не нравится. Не мешало бы разработчикам C# перенять эту возможность из С++ раз уж это С.
Судя по всему, от этой возможности отказались вполне сознательно.
Re[3]: Default-параметры в ф-циях на C#
От: FL  
Дата: 26.12.03 12:27
Оценка:
А>В качестве значения отсутствующего параметра по умолчанию (если уж понадобилось) можно (или нужно) использовать Type.Missing.

Параметр по умолчанию очень удобен, когда добавляется параметр функции, и не хочется переписывать старый код. Type.Missing этой проблемы не решает.
... << RSDN@Home 1.1.0 stable >>
Re[4]: Default-параметры в ф-циях на C#
От: Ransom Stark Россия  
Дата: 26.12.03 13:34
Оценка: 22 (1)
FL>Параметр по умолчанию очень удобен, когда добавляется параметр функции, и не хочется переписывать старый код.
Т.е., изменить сигнатуру функции и от души посмеяться над теми, у кого функция перестанет вызываться?
IMHO, пример создания потенциальных проблем на пустом месте — и всё из за трёх строчек кода?
Другое дело, если в функции 40 параметров, и каждый не обязателен. Как такое писать на шарпе — не представляю. Но надеюсь, никогда и не узнаю.

FL>Type.Missing этой проблемы не решает.

Вариант с Type.Missing не самый удобный, но позволяет избавиться от двусмысленности.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.