2002: C# 1.0
2005: C# 2.0 (generyki)
2007: C# 3.0 (LINQ)
2010: C# 4.0 (dynamic)
2012: C# 5.0 - (async)
Mamy 2015 rok i wiemy już mniej więcej, czego możemy się spodziewać po nowej wersji C#. Poniżej wybrane nowe funkcjonalności, które będą dostępne w Visual Studio 2015:
Auto-Property Initalizers
public class User { public Guid Id { get; } = Guid.NewGuid(); }
Już wcześniej pozbawiono nas konieczności definiowania backing fields, teraz dodano możliwość automatycznego inicjalizowania danych.
Dictionary Initializers
Dictionary<string, User> _defaultUsers = new Dictionary<string, User>(){ {"admin", new User("admin")}, {"guest", new User("guest")} }
Nowy, inny sposób:
Dictionary<string, User> _defaultUsers = new Dictionary<string, User>(){ ["admin"] = new User("admin")}, ["guest"] = new User("guest")} }
Pierwszy sposób (stary) to seria wywołań metody Add, drugi to seria odwołań przez indekser.
Kolejna zmiana jest taka, że paramsy (słowo kluczowe params) mogą być jako IEnumerable<T>, nie muszą być tablicą T.
public int Sum(params IEnumerable<int> numbers){ return numbers.Sum(n => n); }
Mamy nowe literale: bitowy (0b1100) oraz poprawiający czytelność (1_000_000_000).
Wywoływanie statycznych metod:
W C# 6 można wywoływać statyczne metody bez podawania nazwy klasy, jeżeli typ jest statyczny i załączymy odpowiedni using.
using System.Console; public static void Main(){ Write("Writted without type specification"); }
W przypadku konfliktów zawsze wygra metoda statyczna (podobna interpretacja jak w przypadku extension methods).
Conditional access operator:
var name = action.?Method.?Name ?? "no name";
Sprawdzimy, czy wartości są różne od null i jeśli któraś jest nullem, to wartość po lewej stronie zostanie ustawiona na null. Dodatkowo null - coalesce operator ustawi nam domyślną wartość.
Ponadto wewnątrz bloków catch można będzie wołać instrukcje poprzedzone keywordem await.
Exception filters:
catch(Exception ex) if(ex.InnerException == null){ }
Jeśli wyrażenie zwróci false, to wyjątek nie zostanie złapany.
Operator nameof:
zamiast:
throw new ArgumentNullException("name")
będzie można napisać
throw new ArgumentNullException(nameof(name))
Brak komentarzy:
Prześlij komentarz