Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Грядущее C#

Anna | 17.06.2014 | нет комментариев
На конференции NDC 2013, незадолго прошедшей в Лондоне, Мадс Торгерсен (Mads Torgersen), являющийся одним из разработчиков спецификации языка C#, рассказал в своём докладе “The Future of C#” о допустимых нововведениях в нём.

Первичный конструктор (Primary Constructor)

Предуготовлен для сокращённой записи конструктора с параметрами с присваиванием их приватным переменным. Для применения первичного конструктора нужно указать в месте объявления класса позже его имени передаваемые параметры также, как мы их указываем в обыкновенном конструкторе. При этом механически создаются приватные переменные с именами, соответствующими именам параметров. Аналогичная конструкция есть в языке Scala.

//классический конструктор
public class Point {
    private int x, y;

    public Point(int x, int y)
        this.x = x;
        this.y = y;
    }
}

//Первичный конструктор
public class Point(int x, int y) {

}
Автосвойства только для чтения

Если теперь применяют свойства с приватным сеттером

public int X { get; private set;}

либо readonly поля

private readonly int x;
public int X { get { return x; } }

то дозволено будет легко написать

public int X { get; } = 42;  
Применение статических классов в директиве using

При применении директивы using сейчас дозволено будет указывать не только пространства имён, но и статические классы, для обеспечения вероятности применения способов класса без указания его имени.

using System.Math;
...
public double A { get { return Sqrt(Round(5.142)); } }
Property Expressions

Объявление свойств в жанре лямбда-выражений.

public double Distance => Math.Sqrt((X * X)   (Y * Y));
Method Expressions

Тоже, что и выше, но только для способов.

public Point Move(int dx, int dy) => new Point(X   dx, Y   dy);
Применение params с IEnumerable

Вероятность передавать в способы с переменным числом параметров классы, унаследованные от IEnumerable. Если прежде для этого доводилось преобразовывать класс в массив

Do(someEnum.ToArray());
...
public void Do(params int[] values) { ... }

то сейчас дозволено будет легко написать

Do(someEnum);
public void Do(params IEnumerable<Point> points) { ... }

Правда, непостижимо для чего это необходимо, рассматривая, что IEnumerable дозволено передавать в способы и без ключевого слова params.

Оператор безвредной навигации (Safe Navigation Operator)

Оператор ?. Освобождает от необходимости проверки объекта на null перед вызовом его свойств либо способов. Безусловно одинаков аналогичному оператору из Groovy.

Пример:

var bestValue = points?.FirstOrDefault()?.X ?? -1;

Как видно данный оператор гораздо уменьшает код, тот, что теперь бы выглядел вот так:

if (points != null) {
    var next = points.FirstOrDefault();
    if (next != null && next.X != null) return next.X;
}   
return -1;
Итог типа для конструктора generic класса.

C# может выводить типы при вызове generic способов. Скажем, взамен var x = MyClass.Create<int>(24) мы можем написать var x = MyClass.Create(24). Но данный приём не работает для generic классов. Обходным путём в данном случае было применение generiс способа, исполняющего роль фабрики класса.

var x = MyClass.Create(1, "X");
...
public MyClass<T1, T2> Create<T1, T2>(T1 a, T2 b) {
    return new MyClass<T1, T2>(a, b);
}

В новой версии данное лимитация будет убрано, и мы сумеем писать код подобно способам.

var x = new MyClass(1, "X");
Объявление out параметров в вызываемом способе

Вероятно, об этом изменении отменнее каждого расскажет код.

//сейчас
int x;
int.TryParse("123", out x);

//будет
int.TryParse("123", out int x);

Источники:
damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated
ndclondon.oktaset.com/t-11783
adamralph.com/2013/12/06/ndc-diary-day-3/#more
wesnerm.blogs.com/net_undocumented/2013/12/mads-on-c-60.html

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB