Comments 60
наконец таки они появились. отсутствие параметров по умолчанию и необходимость перегрузок чтобы добиться желаемого результата очень удручала. с нетерпением жду описания новых фкусностей четвертого дот нета!
лучше бы уж параметры пропускались запятой как в php или в том же бейсике
тоже хорошая мысль, думаю такой вариант был бы даже намного лучше, ведь не было бы привязки к именам параметров.
Просто парни из Реймонда взяли то, что было реализовано в коке немного раньше. Вы не поверите, но так действительно удобнне )
Зависит от того сколько в среднем параметров нужно передать методу, если опускается пара параметров из, например, двадцати, то через запятые удобнее, но если из двадцати только пару нужно передать, то рулят именованные параметры.
если методу передается 20 параметров, то фтопку такой метод — нужно разделить его на подзадачи
Не могу не соглоситься, но могу дополнить.
Вероятность ошибки при передаче параметров именованными значеними намного ниже. В теперешних реалях программирования этот факт нельзя не учитывать. Но комментарий был не об этом )
Вероятность ошибки при передаче параметров именованными значеними намного ниже. В теперешних реалях программирования этот факт нельзя не учитывать. Но комментарий был не об этом )
да, запятая самое то и наглядно и не будет последствий от переименования,
но вот у майкрософт бывают загоны, далее выпустят C# 4.1, в нем будет запятой пропускаться.
но вот у майкрософт бывают загоны, далее выпустят C# 4.1, в нем будет запятой пропускаться.
Прошу прощение за вопрос, однако почему вы перевод не делаете как топик-перевод? Мне кажется, так удобнее даже для Вас было бы.
Кроме телескопа из примера есть ещё замечательный Builder Pattern.
Отличное решение. Больше никаких перегрузок!
ну не скажите, иногда перезагрузка удобнее.
правильнее будет «Больше никаких ненужных перегрузок!» ;)
правильнее будет «Больше никаких ненужных перегрузок!» ;)
Весьма тонкая грань в вашем ответе.
Никак не могу придумать пример, в котором обычная перегрузка была бы удобнее.
Никак не могу придумать пример, в котором обычная перегрузка была бы удобнее.
А кто-нибудь знает, как это реализовано?
На уровне атрибутов или какие-то нововведения в CLR?
На уровне атрибутов или какие-то нововведения в CLR?
что-то мне подсказывает что перезагрузками, просто теперь отпадает необходимость писать их самостоятельно… хотя именованные параметры смущают, их простой перегрузкой не реализовать…
Скорее всего компилятор сам подставляет нужные значения. Тоесть Вы пишите testClass.PerformOperation(«val», val3: 10.2); а компилятор преобразует это в testClass.PerformOperation(«val», 10, 12.3);
никаких атрибутов, да и CLR, насколько я знаю, из-за совместимости изменения вноситься не могут. Все новшества — это очень-очень вкусный «синтаксический сахар»
никаких атрибутов, да и CLR, насколько я знаю, из-за совместимости изменения вноситься не могут. Все новшества — это очень-очень вкусный «синтаксический сахар»
Если так, то эта фича не будет работать с откомпилированными библиотеками, если исходного кода нет под рукой. Мета-информация о значениях по-умолчанию должна быть известна.
Будет новая CLR: PDC Day 3: What's Coming in CLR 4.0 (Part 1)
таки да, похоже атрибутами
weblogs.asp.net/podwysocki/archive/2008/10/29/c-4-0-named-and-optional-parameters-behind-the-scenes.aspx
weblogs.asp.net/podwysocki/archive/2008/10/29/c-4-0-named-and-optional-parameters-behind-the-scenes.aspx
что ставит под сомнение скорость вызова таких методов
Атрибуты, на сколько я понял, нужны компилятору. Он определяет дефолтные значения во время компиляции и подставляет их в параметры в виде констант. Так что скорость работы не изменится.
похоже что нет
по ссылке которую я привел атрибуты у методов присутствуют в скомпилированном коде
цитата:
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;
}
по ссылке которую я привел атрибуты у методов присутствуют в скомпилированном коде
цитата:
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;
}
классно, спасибо. а на счет гемора с указанием именнованного параметра и трудностями чтобы сменить его название, а разве Rename тут не работает так же как с переменными? я надеюсь эта возможность реализована в этом случае
Это зависимость от инструмента разработки получается. Откроете вы как-нибудь файл в блокноте, смените название параметра — тут все и не скомпилируется.
Что-то посказывает, что из c# делают некий анти-паттерн God Language, который есть смесь всего самого лучшего из Basic`а, Java`ы, php, с++ и прочего.
Удобно конечно, но тогда давайте и множественное наследование введем.
Где-то здесь подвох зарылся, а где — покажет время.
Удобно конечно, но тогда давайте и множественное наследование введем.
Где-то здесь подвох зарылся, а где — покажет время.
Согласен. И вообще, мне не понятно, неужели C# 3.0 настолько изжил себя, что возникла острая необходимость в следующей версии? Многие ещё до сих пор LINQ не освоили…
множественное наследование по-моему в шарпе не будет никогда, они заменили эту фичу наследованием от нескольких интерфейсов. чо-то подобное — не помню точно
Даже не знаю, что и сказать. Дефолтные значения довольно удобны, а вот именованные параметры буду стараться использовать как можно меньше, только там, где это действительно необходимо.
Ндяс, сначала С# представлял из себя эдакий маленький удобный язык, который даже школьник поймёт — лёгкая замена Бейсику, конкурент Java, простая альтернатива сложному и коварному С++.
Но теперь мне кажется что совсем скоро С# сможет тягаться в сложности с С++ — и очарование пропадёт :)
Но теперь мне кажется что совсем скоро С# сможет тягаться в сложности с С++ — и очарование пропадёт :)
Разве что из-за .NET наворотов.
Еще пару лет и шарп будет неотличим от плюсов. Все к тому идет. Шаблоны ввели, вот, наконец-то, параметры сделали. Еще пару штрихов и всё — привет, плюсы :)
Иногда, это будет удобно, да. Но вот конструкторы такие я им не прощу никогда. Дебильно спроектированные indian-style классы, привет вам.
Черезвычайно полезно, когда появляются вот такие вот статьи. Так, постепенно, маленькими дозами можно легко освоить все нововведения языка. Буду рад, если они будут появляться и дальше, чтобы с выходом C# 4.0 свободно пользоваться новыми возможностями.
Да уж, не знаю, радоваться этому, или нет… Использование перегрузки однозначно говорило о том, что дефолтные параметры — плохо. Теперь это вроде как чисто и красиво.
Смешно если честно.
Delphi имел параметры по умолчанию не помню с какой точно, но точно с младших версий. У C# разработчик языка один и тот же, а только собираются вводить такую фичу.
Delphi имел параметры по умолчанию не помню с какой точно, но точно с младших версий. У C# разработчик языка один и тот же, а только собираются вводить такую фичу.
Параметры по умолчанию это очень удобно!
Интересно, а когда сделают константные параметры…
Интересно, а когда сделают константные параметры…
Вы не поверите, но в 1С и в Аксапте подобное объявление давно не новость
А что будет, если:
class Test
{
public Test () { Console.WriteLine («1»); }
public Test (string message = «2») { Console.WriteLine (message); }
}
…
Test test = new Test ();
?
class Test
{
public Test () { Console.WriteLine («1»); }
public Test (string message = «2») { Console.WriteLine (message); }
}
…
Test test = new Test ();
?
Всегда от этих перегрузок тошнило, из-за них сижу на VB и над C#-щиками действительно злостно посмеиваюсь :) Теперь наверно скоро на C# можно будет переходить, правда не думаю, что в этот раз параметры по умолчанию сделают достаточно хорошо. Чего-нибудь обязательно не доделают, взять хотя бы эти запятые.
Sign up to leave a comment.
Новые возможности C# 4.0. Часть 2: параметры по умолчанию