Preview Visual Studio 2015 a .NET 4.6 dnes vyšly, nastal tedy čas si v seriálu krátkých článků připomenout novinky v C# 6.0 (jednotlivé články zamýšlené série budou přibývat postupně):
RTM Update: Constructor struct bez parametrů byl z finální podoby C# 6.0 odstraněn.
- Auto-property initializers a getter-only (read-only) auto-properties
- Expression-bodied function members
- Using static
- Null-conditional operators (?., ?[], …)
- String inerpolation – zkrácený String.Format()
- nameof() expressions
- Index initializers – přehlednější inicializace slovníků
- Exception filters, await v catch/finally blocích
- Konstruktor struct bez parametrů – není součástí C# 6.0 RTM
- Ostatní (extension-Add v initializers, overload resolution)
- Primary constructors
- Declaration expression
Finální podoba C# 6.0 se může měnit, články vychází z informací z okamžiku vydání VS 2015 Preview – soupisu změn od Madse Torgersena, C# Language PM a ze stručného seznamu změn vedeného u projektu Roslyn.
V tuto chvíli k velkému smutku všech zúčastněných byly ze C# 6.0 odstraněny dvě oblíbené konstrukce, které již v CTP verzích fungovaly:
- Primary constructors – public class Point(int x, int y)
- Declaration expressions – if (int.TryParse(input, out int output))
Dá se předpokládat, že cut-off v tomto případě znamená odklad do C# 7.0, i když může dojít i k zásadním změnám.
Initializers for auto-properties
Jde o syntaxi známou z běžných fieldů, jejíž použitelnost byla rozšířena na auto-properties:
public class Customer { public string First { get; set; } = "Jane"; public string Last { get; set; } = "Doe"; }
Ve skutečnosti dojde k inicializaci podkladového fieldu, na který se auto-property mapuje.
Getter-only auto-properties (readonly)
V předchozích verzích C# musela mít auto-property setter i getter. Nově lze definovat pouze getter a ve skutečnosti tím vznikne read-only podkladový field, který lze nastavit buď pomocí initializeru (viz výše) nebo z constructoru.
public class Customer { public string First { get; } = "Jane"; public string Last { get; } = "Doe"; }
Nabízí se zde použití pro immutable třídy, v nichž dosud zkrácenou syntaxi auto-properties nebylo možné využít.
Pingback: C# 6.0: Null-conditional operators .? [4/10] | HAVIT Knowledge Base
Pingback: C# 6.0: String interpolation – zkrácený String.Format() [5/10] | HAVIT Knowledge Base
Pingback: C# 6.0: Using static [3/10] | HAVIT Knowledge Base
Pingback: C# 6.0: Expression-bodied function members [2/10] | HAVIT Knowledge Base
Pingback: C# 6.0: nameof() expressions [6/10] | HAVIT Knowledge Base
Pingback: C# 6.0: Index initializers – přehlednější inicializace slovníků [7/10] | HAVIT Knowledge Base
Pingback: C# 6.0: Exception filters, await v catch/finally bloku | HAVIT Knowledge Base
Pingback: C# 6.0: Konstruktor struct bez parametrů | HAVIT Knowledge Base
Pingback: C# 6.0: Ostatní (extension-Add v initializers, overload resolution) [10/10] | HAVIT Knowledge Base