В принципе, ничего нового, но даёт представление о фичах, которые скорее всего попадут в релиз (Primary Constructors и Declaration Expressions, например, уже не прошли
UPD. Кстати, вот про это я что-то раньше в оф.блогах не читал:
Expression-bodied function members allow methods, properties and other kinds of function members to have bodies that are expressions instead of statement blocks, just like with lambda expressions.
Methods as well as user-defined operators and conversions can be given an expression body by use of the “lambda arrow”:
public Point Move(int dx, int dy) => new Point(x + dx, y + dy);
public static Complex operator +(Complex a, Complex b) => a.Add(b);
public static implicit operator string(Person p) => "\{p.First} \{p.Last}";
The effect is exactly the same as if the methods had had a block body with a single return statement.
For void returning methods – and Task returning async methods – the arrow syntax still applies, but the expression following the arrow must be a statement expression (just as is the rule for lambdas):
public void Print() => Console.WriteLine(First + " " + Last);
Properties and indexers can have getters and settersgetter-only properties and indexers can have an expression body:
public string Name => First + " " + Last;
public Customer this[long id] => store.LookupCustomer(id);
Здравствуйте, Qbit86, Вы писали:
S>>В официальном блоге появилось описание текущего положения дел с C#6. Q>А когда планируется релиз MSVS 2015? Будет ли для него Community Edition?
Официальной даты нет, "later in the year" in 2015. Скорее всего выйдет вместе с win10. И судя по состоянию проектов, которые планируется включить в студию — это будет осенью.
Community Edition будет с вероятностью 0.99, иначе я вообще не улавливаю логики в открытии vs2013. Закроют — будет НЕНАВИСТЬ, как с vs 2012 express for desktop
Здравствуйте, AndrewVK, Вы писали:
S>>UPD. Кстати, вот про это я что-то раньше в оф.блогах не читал: AVK>Да ладно, это было даже в первой публичной демонстрации C# 6 на билде. Просто реализация почему то сильно подзадержалась.
Угу. Я про то, что раньше официальных подтверждений для методов и индексаторов не было. Только для простых свойств.
Здравствуйте, Sinix, Вы писали:
AVK>>Да ладно, это было даже в первой публичной демонстрации C# 6 на билде. Просто реализация почему то сильно подзадержалась. S>Угу. Я про то, что раньше официальных подтверждений для методов и индексаторов не было. Только для простых свойств.
Ты чего то путаешь. Для методов было заявлено с самого начала.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
В целом неплохо, не вставляет только бесполезняк типа "exceptions filter" (у кого-то есть реально полезный пример использования, который сильно сокращает код по сравнению со старым вариантом?).
И static import — могли бы не изгаляться яйцеголовые, а тупо реализовать в стиле pascal:
with(obj1, obj2){
.member1 = .member2 * 10;
}
Это НАМНОГО нагляднее, чем вот эта помойка, которую они сделают из функций и названий классов. Почему проектировщики такие индусы?? Неужто НИЧЕГО не кликает в башке, когда явно совесть подзуживает?
Здравствуйте, btn1, Вы писали:
B>не вставляет только бесполезняк типа "exceptions filter" (у кого-то есть реально полезный пример использования, который сильно сокращает код по сравнению со старым вариантом?).
Посмотрел код на немерле, где фильтры были с самого начала. Используется эта возможность (как и паттерн-матчинг в catch-ах) крайне редко. Так что ты прав. Хотя сама возможность удобна. Так что лишней не будет.
B>И static import — могли бы не изгаляться яйцеголовые, а тупо реализовать в стиле pascal: B>
Это из другой оперы. Доступа к другим модулям это не даст — это даст доступ к членам некоторого объекта.
Собственно, фича не плоха, но и импорт типов тоже штука полезная.
Собственно можно было бы реализовать и то, и другое. Или обобщить using до проекции областей видимости. Тогда можно было бы делать так:
using System.Coinsole;
class Prog
{
static void Main()
{
var obj1 = new Obj1();
using obj1;
WriteLine(member1);
}
}
B> чем вот эта помойка, которую они сделают из функций и названий классов. Почему проектировщики такие индусы?? Неужто НИЧЕГО не кликает в башке, когда явно совесть подзуживает?
Никакой помойки не наблюдаю. В Немерел импорт типов есть изначально. Фича удобная проблем не создает. Единственное что... в Немерле вывод типов по сильнее, а значит реже возникают неоднозначности.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, btn1, Вы писали:
B>В целом неплохо, не вставляет только бесполезняк типа "exceptions filter" (у кого-то есть реально полезный пример использования, который сильно сокращает код по сравнению со старым вариантом?).
exception filter не код сокращает, а реализует некоторый сценарий, который раньше на C# был нереализуем в принципе и приходилось либо кусочки на VB писать, либо постпроцессинг IL прикручивать.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
S>В официальном блоге появилось описание текущего положения дел с C#6.
S>В принципе, ничего нового, но даёт представление о фичах, которые скорее всего попадут в релиз (Primary Constructors и Declaration Expressions, например, уже не прошли
Для меня было новым using static для нестатических классов и enum.
А также string interpolation c синтаксисом $"{x} {y} {z}", без обратного слеша намного лучше. $@ вообще жесть, я не въехал.
И ответы на вопросы в комментариях очень интересные.
Здравствуйте, Sinix, Вы писали:
S>Methods as well as user-defined operators and conversions can be given an expression body by use of the “lambda arrow”: S>
S>public Point Move(int dx, int dy) => new Point(x + dx, y + dy);
S>public static Complex operator +(Complex a, Complex b) => a.Add(b);
S>public static implicit operator string(Person p) => "\{p.First} \{p.Last}";
S>
Здравствуйте, HrorH, Вы писали:
HH>Для меня было новым using static для нестатических классов и enum.
Да, синтаксис они поменяли, но в этом релизе вроде старый.
Note: The Preview will only import members of static classes. We have since changed the design in several ways:
1. The syntax will be more different from current using clauses – it will have the keywords “using static”.
2. Members of non-static types can be imported, including structs and enums
3. Members of VB modules and F# top level functions can be imported
4. Extension methods will not be imported into top-level scope; instead they will show up as extension methods. This gives a way to import extension methods from just a single class, something which wasn’t possible before.
Кстати, п.4 вроде с самого начала был, вот тут в "Static Using Statements" упоминался.
HH>А также string interpolation c синтаксисом $"{x} {y} {z}", без обратного слеша намного лучше. $@ вообще жесть, я не въехал. HH>И ответы на вопросы в комментариях очень интересные.
Угу. И вопросы тоже. Я там с verbose verbatim strings тоже отметился. Позорище блин
public Point Move(int dx, int dy) => new Point(x + dx, y + dy);
public static Complex operator +(Complex a, Complex b) => a.Add(b);
public static implicit operator string(Person p) => "\{p.First} \{p.Last}"; // в следующем релизе будет $"{p.First} {p.Last}"
DS>И в чем кайф... эээ... сакральный смысл?
We do what we must because we can?
Если честно, про половину фич (кроме null-conditional operators разве что) можно то же самое спросить.
Особенно про parameterless .ctor() в структурах. Добровольно подкладывать в язык такие грабли? Верните Хейлсберга, пожалуйста
Здравствуйте, AndrewVK, Вы писали:
AVK>exception filter не код сокращает, а реализует некоторый сценарий, который раньше на C# был нереализуем в принципе и приходилось либо кусочки на VB писать, либо постпроцессинг IL прикручивать.
Не. Ключевой момент — что будет в текущем стектрейсе. Exception filter, в чем его особенность, стектрейс не меняет, в отличие от рукопашного кода. Это позволяет реализовывать определенные сценарии диагностики.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Не. Ключевой момент — что будет в текущем стектрейсе. Exception filter, в чем его особенность, стектрейс не меняет, в отличие от рукопашного кода. Это позволяет реализовывать определенные сценарии диагностики.
Не меняет вообще, даже если исключение продолжает свой путь дальше?
Здравствуйте, AndrewVK, Вы писали:
AVK>Не. Ключевой момент — что будет в текущем стектрейсе. Exception filter, в чем его особенность, стектрейс не меняет, в отличие от рукопашного кода. Это позволяет реализовывать определенные сценарии диагностики.
Не для спора
А какие преимущества есть перед стандартным throw именно для диагностики?
Сложный код типа логирования в exception filter один фиг не запихнёшь. Если ничего не путаю, исключения в фильтрах проглатываются, а не заменяют собой обрабатываемое исключение.