Co se to děje s .NETem

Tomáš Herceg       08.05.2015       C#, Visual Studio, .NET       14309 zobrazení

Nedávno proběhla konference Build, na níž bylo zveřejněno velké množství novinek. Vzhledem k tomu, že nám Microsoft opět dělá ve verzích maglajz, v tomto článku se pokusím vysvětlit, co se s novým .NET frameworkem vlastně děje a jaké bude další směřování.

Mimo jiné bylo uvedeno Visual Studio 2015 RC, které si můžete stáhnout.

 

.NET Core

.NET Core je nová verze .NETu optimalizovaná pro novou generaci zařízení a cloud. .NET již dávno není technologie určená pouze pro stolní a serverová Windows, v posledních letech se v .NETu píší aplikace pro mobilní zařízení a tablety. S nástupem cloudu se také objevilo mnoho scénářů, na které původní koncepce .NETu nebyla nejvhodnější. Kromě toho existovalo runtimů několik – klasický .NET runtime, pak runtime pro Silverlight, pro Windows Phone 7.X a 8, WinRT, univerzální aplikace a navíc ještě pro Android a iOS.

.NET Core je jednotný runtime, který je společný pro všechny platformy. Obsahuje základní datové typy a třídy, přičemž všechny ostatní nadstavby (např. Entity Framework, ASP.NET MVC) nejsou součástí tohoto balíku, ale jsou implementovány jako externí knihovny.

Velkou výhodou je to, že .NET Core se nemusí instalovat – vzhledem k tomu, že runtime je poměrně malý, všechny knihovny jsou obsaženy přímo ve vaší aplikaci. V případě, že nainstalujete novou aplikaci, která potřebuje novější verzi runtime, neohrozí to tu starou, která má stále svůj původní runtime. Microsoft také může vydávat updaty přidružených technologií (např. Entity Frameworku) kdykoliv a nemusí čekat 2 roky, než vyjde nová verze runtime, jako to bývalo kdysi.

Přichází zde do hry též .NET Native, což je technologie, která dokáže aplikaci zkompilovat do nativního kódu, díky čemuž je aplikace mnohem rychlejší, a zahrnout jen části runtime, které aplikace používá. Aktuálně .NET Native funguje pouze v aplikacích pro Windows 10, nicméně v budoucnu půjde použít pro libovolnou aplikaci na .NET Core.

Další velkou novinkou je, že .NET Core je multiplatformní – podporuje OS X i Linux. Pracuje se na podpoře FreeBSD. Podporovány jsou platformy x86, x64 i ARM.

A velkou změnou je též fakt, že .NET Core je open source. Můžete si stáhnout jeho zdrojové kódy nebo se aktivně zapojit do jeho vývoje.

 

.NET Framework 4.6

Při upgradu například z .NETu verze 3.5 na 4 nebylo potřeba v aplikacích měnit nic. .NET Framework pořád obsahoval ty samé knihovny, akorát přidával další a rozšiřoval stávající API.

Aplikace, které dnes běží v nejnovějším .NET Frameworku 4.5.2, ale nepůjde takto snadno překlopit do .NET Core. Zatím neexistuje implementace Windows Forms, WPF ani ASP.NET WebForms pro .NET Core a pravděpodobně ani nebudou. Pokud budete chtít svou aplikaci přeportovat na .NET Core, budete nejspíše muset také upravit značnou část kódu, jelikož .NET Core nemusí obsahovat všechny funkce, které byly součástí plného .NET Frameworku (například namespace System.IO, System.Data atd.).

Aby nebylo nutné přepisovat stávající aplikace, paralelně s .NET Core bude existovat i současná podoba .NET Framework 4.6. Ten bude stále zpětně kompatibilní, takže aplikace fungující na verzi 4.5 půjde snadno překlopit do 4.6. Microsoft slibuje, že klasický .NET Framework s námi bude ještě mnoho let, takže není nutné panikařit a přepisovat stávající aplikace. Je ale vhodné si nový .NET Core vyzkoušet a pokud je to možné, nové projekty začínat na .NET Core.

Dobrá zpráva je, že pokud máte aplikaci napsanou v ASP.NET MVC, Web Pages nebo Web API, pak ji s pár drobnými změnami půjde překlopit do .NET Core – tyto technologie totiž pro .NET Core Microsoft portoval a podporuje je.

Dále pokud používáte například Entity Framework, nová verze 7 bude podporovat .NET Core, nicméně pokud stále používáte EDMX model, budete jej muset zmigrovat na Code First. Výhodou oproti tomu je, že nebude problém Entity Framework použít například v mobilní aplikaci, což dosud nebylo možné.

 

Novinky v jazycích

Jazyky C# 6 a VB 14 jsou ve Visual Studio 2015 RC již feature-complete, takže můžete s chutí začít používat nové funkce. Kompilaci má v novém .NETu a Visual Studiu na starosti Roslyn, což je open source implementace kompilátorů VB a C#. V budoucnu se určitě můžeme těšit na nové funkce a i v případě Roslynu se můžete zapojit do vývoje a navrhovat vlastní vylepšení těchto jazyků.

Operátor nameof řeší problém, kdy jste název proměnné nebo funkce použili v aplikaci jako string. Místo “x” lze napsat nameof x, což je čistější a přežije refactoring. Tento operátor je nově k dispozici i ve Visual Basicu.

public double GetLength(float? x, float? y) 
{
    (if x == null) 
    {
        throw new ArgumentNullException(nameof(x));
    }
}

String interpolation je něco jako string.Format, akorát do složených závorek nezapisujeme čísla, ale rovnou výrazy. Syntaxe se několikrát měnila, tato je doufejme finální. Funguje i ve Visual Basicu.

var s = $"{p.Name,20} is {p.Age:D3} year{{s}} old";

Null-conditional operator je velmi užitečná věc, která ušetří mnoho ifů s kontrolou na hodnotu null. Opět funguje i ve Visual Basicu.

int? length = customers?.Length; // pokud objekt customer je null, length bude také null
Customer first = customers?[0];  // pokud pole customers je null, first bude také null
PropertyChanged?.Invoke(this, args);  // pokud PropertyChanged je null, pak se zbytek za otazníkem ignoruje

Index initializers je nová a přehlednější syntaxe pro naplnění Dictionary:

var numbers = new Dictionary<int, string> { 
    [7] = "seven", 
    [9] = "nine", 
    [13] = "thirteen" 
};

Exception filters umožňují určité catch větve zavolat pouze v případě, že platí nějaká podmínka.

try { 
}
catch (MyException e) if (myfilter(e)) { 
}

Nově se také v catch a finally může ocitnout příkaz await.

Auto-property initializers umožňují specifikovat automatickým vlastnostem počáteční hodnotu. Funguje to i u read-only vlastností.

public class Customer 
{ 
    public string First { get; set; } = "Jane"; 
    public List<string> Titles { get; } = new List<string>(); 
}

Expression bodies zjednodušují zápisy kratších funkcí a readonly properties.

public Point Move(int dx, int dy) => new Point(x + dx, y + dy); 
public string FullName => FirstName + " " + LastName;

Using static zjednodušuje syntaxi tím, že při volání statické metody nemusíte psát název třídy, v níž je tato metoda deklarována.

using System.Console; 
using System.Math;

class Program 
{ 
    static void Main() 
    { 
        WriteLine(Sqrt(3*3 + 4*4)); 
    } 
}

Ve Visual Basicu jsou nyní podporovány víceřádkové stringy (kompilátor sám pozná, že string pokračuje na dalším řádku).

 

Novinky ve Visual Studiu

Debugging v novém Visual Studiu obsahuje mnoho vylepšení. Edit and continue se nezalekne lambda funkcí ani awaitů, byla vylepšena konfigurace breakpointů a přibylo nové okno Diagnostics, kde vidíte přehledně, co se s aplikací děje, kolik alokuje paměti atd.

Ve WPF přibyl pěkný editor vizuálního stromu (obdoba developer tools ve webových prohlížečích), díky kterému můžete v běžící WPF aplikaci zkoumat jednotlivé komponenty, měnit jejich vlastnosti atd.

Nově je součástí Visual Studia i starter edice Xamarinu a podpora vývoje multiplatformních mobilních aplikací pomocí Apache Cordova. Instalátor Visual Studia vám umí nainstalovat celé Android SDK, má svůj emulátor Androidu, který je podstatně rychlejší než ten oficiální a mnoho dalšího.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

 

 

Nový příspěvek

 

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

using static

Ještě u toho using static se musí uvádět i to klíčové slovo static (samotné using nestačí). A jde to použít i na enum.

using static System.Console; 
using static System.Math;
using static System.DayOfWeek;

class Program 
{ 
    static void Main() 
    { 
        WriteLine(Sqrt(3*3 + 4*4));
        WriteLine(Friday - Monday); 
    } 
}

viz. https://github.com/dotnet/roslyn/wiki/Ne...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Aha, máš pravdu - oni to pořád mění.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

getter-only auto-property

Hezký přehled.

Do getter-only auto-property jde v C# 6 ještě přiřazovat i v konstruktoru (tj. přiřazení nemusí být jen jako auto-property initializer):

public class Customer
{
    public string Name { get; }

    public Customer(string first, string last)
    {
        this.Name = first + " " + last;
    }
}
nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback