Novinky v C# 7.0

Out variables

V C# 7.0 byla vylepšena syntaxe pro out parametry. Dříve jste museli out proměnnou nejprve deklarovat a pak následně inicializovat. Nyní můžeme deklaraci přesunout do seznamu argumentů metody.

Z tohoto kódu:

Se tak stane:

Je zde také možnost použít var – v tomto případě pak jazyk sám určí jakého je proměnná typu podle návratového typu dané metody.

  • Kód je lépe čitelný.
    • Deklarujeme proměnnou tam kde ji používáme. Nikoliv na jiném řádku.
  • Nemusíme přiřazovat počáteční hodnotu.

Tuples

Tuples nám umožňují vytvářet datové struktury s několika fieldy a následně je využívat pro návratové hodnoty metod.

Local functions

Za použití C# 7.0 máme možnost použít lokální funkci v těle metody a pak jí následně volat. Tato lokální je však dostupná pouze v dané metodě tudíž se k ní nedostaneme z jiných metod. Lokální funkce využijeme především nějakou metodu voláte POUZE z jedné metody – Celý návrh třídy se pak stává přehlednějším.

Z tohoto kódu:

Se tak stane:

Pattern matching

Možnost pomocí klíčových slov is a switch řídit větvení kódu, popř. s možností dodatečných podmínek when. Je to podobné, jako C# 6.0 přišel s podmínkami u catch – bloků.

Ref locals and returns

Možnost použít referenci na proměnnou definovanou jinde.

More expression-bodied members

C# 6.0 přišel s Expression-bodied members pro metory a read-only property. V C# 7.0 se tato funkcionalita rozšiřuje na konstruktory, destruktory, property (get, set).

Throw expressions

Syntaxe je stejná jako dříve s tím rozdílem že můžeme throw můžeme umístit například do podmíněného výrazu.

Toto vylepšení umožní přesunout throw do inicializace. Dříve by pak tato část musela být v konstruktoru dané třídy.

Z tohoto kódu:

Se tak stane:

Generalized async return types

Task<T> je referenční datový typ a jeho použití znamená alokaci objektu na haldě. Pro hodnotové návratové typy nově přichází optimalizace v podobě ValueTask<T>.

Numeric literal syntax improvements

C# 7.0 přináší dvě nové funkce, které usnadňují zápis číselných hodnot: binary literalsdigit separators.

Binary literals

Slouží pro vytváření bitových masek nebo binárního zápisu čísla. Hodnota „0b“ na začátku konstanty označuje, že číslo je zapsáno v binární podobě.

Digit separator

Slouží k oddělení čistitelných hodnot pomocí podtržítka „_“. Může být použit v jakékoliv konstantě.

Lukáš Vlček

Autor je SW vývojář primárně se zaměřující na platformu .NET Framework/.NET Core. Avšak jiné moderní technologie mu nejsou cizí. Mezi jeho koníčky paří vedle sportu i amatérské "bastlení" s Arduinem a Raspberry Pi.