Pull to refresh

Comments 60

наконец таки они появились. отсутствие параметров по умолчанию и необходимость перегрузок чтобы добиться желаемого результата очень удручала. с нетерпением жду описания новых фкусностей четвертого дот нета!
лучше бы уж параметры пропускались запятой как в php или в том же бейсике
тоже хорошая мысль, думаю такой вариант был бы даже намного лучше, ведь не было бы привязки к именам параметров.
Просто парни из Реймонда взяли то, что было реализовано в коке немного раньше. Вы не поверите, но так действительно удобнне )
Зависит от того сколько в среднем параметров нужно передать методу, если опускается пара параметров из, например, двадцати, то через запятые удобнее, но если из двадцати только пару нужно передать, то рулят именованные параметры.
если методу передается 20 параметров, то фтопку такой метод — нужно разделить его на подзадачи
А как вы будете работать с Экселем? Перепишите Эксель? :)
у екселя есть методы с 20ю параметрами?
Там и с тридцатью двумя есть.
А вообще, при разработке распределённых приложений функции с большим количеством параметров — нормальное явление.
Не могу не соглоситься, но могу дополнить.
Вероятность ошибки при передаче параметров именованными значеними намного ниже. В теперешних реалях программирования этот факт нельзя не учитывать. Но комментарий был не об этом )
да, запятая самое то и наглядно и не будет последствий от переименования,
но вот у майкрософт бывают загоны, далее выпустят C# 4.1, в нем будет запятой пропускаться.
Последствия от переименований решаются средствами автоматического рефакторинга. А запятые можно будет умаяться считать.
Прошу прощение за вопрос, однако почему вы перевод не делаете как топик-перевод? Мне кажется, так удобнее даже для Вас было бы.
Вот незадача: меня смутила ссылка на оригинальный топик, данная дважды. ;-)
Как не делаю? Вроде именно этот тип топика и выбираю. Даже иконка стоит:
Кроме телескопа из примера есть ещё замечательный Builder Pattern.
UFO landed and left these words here
Отличное решение. Больше никаких перегрузок!
ну не скажите, иногда перезагрузка удобнее.
правильнее будет «Больше никаких ненужных перегрузок!» ;)
Весьма тонкая грань в вашем ответе.
Никак не могу придумать пример, в котором обычная перегрузка была бы удобнее.
new SqlGreateWrapper(string connectionString);
new SqlGreateWrapper(SqlConnection connection);
точно. у меня правда первая мысль была про потоки и пути к файлам :")

З.Ы.: если про Sql то нагляднее будет connectionString и SqlConnectionStringBuilder ;)
А кто-нибудь знает, как это реализовано?
На уровне атрибутов или какие-то нововведения в CLR?
что-то мне подсказывает что перезагрузками, просто теперь отпадает необходимость писать их самостоятельно… хотя именованные параметры смущают, их простой перегрузкой не реализовать…
Ну да, наверно так и есть. Именованные параметры тоже просто сделать таким способом.
Скорее всего компилятор сам подставляет нужные значения. Тоесть Вы пишите testClass.PerformOperation(«val», val3: 10.2); а компилятор преобразует это в testClass.PerformOperation(«val», 10, 12.3);
никаких атрибутов, да и CLR, насколько я знаю, из-за совместимости изменения вноситься не могут. Все новшества — это очень-очень вкусный «синтаксический сахар»
Если так, то эта фича не будет работать с откомпилированными библиотеками, если исходного кода нет под рукой. Мета-информация о значениях по-умолчанию должна быть известна.
что ставит под сомнение скорость вызова таких методов
Атрибуты, на сколько я понял, нужны компилятору. Он определяет дефолтные значения во время компиляции и подставляет их в параметры в виде констант. Так что скорость работы не изменится.
похоже что нет
по ссылке которую я привел атрибуты у методов присутствуют в скомпилированном коде
цитата:

Let's look through .NET Reflector to see the generated code for the constructor.
public TextBoxInfo(
[Optional, DefaultParameterValue("")] string text,
[Optional, DefaultParameterValue(10f)] float size,
[Optional, DefaultParameterValue(50f)] float width,
[Optional] Color color)
{
this.text = text;
this.size = size;
this.width = width;
this.color = color;
}
Ну да, а при вызове этого метода без параметров сгенерится такой код:

new TextBoxInfo("", 10f, 50f, null);
да, вы правы, похоже ничего страшного нет
классно, спасибо. а на счет гемора с указанием именнованного параметра и трудностями чтобы сменить его название, а разве Rename тут не работает так же как с переменными? я надеюсь эта возможность реализована в этом случае
Это зависимость от инструмента разработки получается. Откроете вы как-нибудь файл в блокноте, смените название параметра — тут все и не скомпилируется.
ну это крайности :) это одно и тоже что если вы название какого-то метода захотите поменять, без VS тоже не удобно :)) Есть конечно банальный Replace в блокноте, но это не выход же :)
Что-то посказывает, что из c# делают некий анти-паттерн God Language, который есть смесь всего самого лучшего из Basic`а, Java`ы, php, с++ и прочего.

Удобно конечно, но тогда давайте и множественное наследование введем.

Где-то здесь подвох зарылся, а где — покажет время.
Согласен. И вообще, мне не понятно, неужели C# 3.0 настолько изжил себя, что возникла острая необходимость в следующей версии? Многие ещё до сих пор LINQ не освоили…
Да и не только Linq. Workflow тоже полезная штука.
… которая к самому языку никакого отношения не имеет.
множественное наследование по-моему в шарпе не будет никогда, они заменили эту фичу наследованием от нескольких интерфейсов. чо-то подобное — не помню точно
Не совсем. Они сделали отдельную конструкцию «интерфейс» (в плюсах ее нет, вместо нее используются абстрактные классы), и разрешили множественное наследование только от нее, что мне лично очень нравится.
Даже не знаю, что и сказать. Дефолтные значения довольно удобны, а вот именованные параметры буду стараться использовать как можно меньше, только там, где это действительно необходимо.
Ндяс, сначала С# представлял из себя эдакий маленький удобный язык, который даже школьник поймёт — лёгкая замена Бейсику, конкурент Java, простая альтернатива сложному и коварному С++.

Но теперь мне кажется что совсем скоро С# сможет тягаться в сложности с С++ — и очарование пропадёт :)
Разве что из-за .NET наворотов.
Еще пару лет и шарп будет неотличим от плюсов. Все к тому идет. Шаблоны ввели, вот, наконец-то, параметры сделали. Еще пару штрихов и всё — привет, плюсы :)
UFO landed and left these words here
Шаблоны в плюсах — это инструмент метапрограммирования, а в шарпе полиморфизма. Их нельзя сравнивать, без многих но.
Иногда, это будет удобно, да. Но вот конструкторы такие я им не прощу никогда. Дебильно спроектированные indian-style классы, привет вам.
Черезвычайно полезно, когда появляются вот такие вот статьи. Так, постепенно, маленькими дозами можно легко освоить все нововведения языка. Буду рад, если они будут появляться и дальше, чтобы с выходом C# 4.0 свободно пользоваться новыми возможностями.
Да уж, не знаю, радоваться этому, или нет… Использование перегрузки однозначно говорило о том, что дефолтные параметры — плохо. Теперь это вроде как чисто и красиво.
Смешно если честно.
Delphi имел параметры по умолчанию не помню с какой точно, но точно с младших версий. У C# разработчик языка один и тот же, а только собираются вводить такую фичу.
Параметры по умолчанию это очень удобно!

Интересно, а когда сделают константные параметры…
Вы не поверите, но в 1С и в Аксапте подобное объявление давно не новость
А что будет, если:

class Test
{
public Test () { Console.WriteLine («1»); }
public Test (string message = «2») { Console.WriteLine (message); }
}


Test test = new Test ();

?
Так как не имею под рукой 2010 студии предположу, что не скомпилируется
Всегда от этих перегрузок тошнило, из-за них сижу на VB и над C#-щиками действительно злостно посмеиваюсь :) Теперь наверно скоро на C# можно будет переходить, правда не думаю, что в этот раз параметры по умолчанию сделают достаточно хорошо. Чего-нибудь обязательно не доделают, взять хотя бы эти запятые.
Sign up to leave a comment.

Articles