Nove značajke u C # 6

C # 6 isporučuje se s Visual Studioom 2015 i donosi neke zanimljive nove značajke. Postoji obilje mogućnosti koje promiču manje nereda i pisanje čišćeg, održivog koda. U ovom postu želim vas provesti kroz neke od novih značajki na jeziku C #.

Filtri za iznimke

Filtri za iznimke nisu novi u VB-u - sada ovu značajku imate i na C #. Oni vam omogućuju filtriranje iznimaka u vašem kodu na temelju ozbiljnosti. Evo primjera.

try

{

//some code that might throw an exception

}

catch (Exception exception) if(exception.GetType() != typeof(SqlException))

{

ExceptionManager.HandleException(exception);

}

Gornji kod provjerava je li izbačena iznimka tipa SqlException. Ako nije, rješava se iznimka. Evo još jednog primjera koji pokazuje kako možete provjeriti svojstvo Message objekta iznimke i prema tome odrediti uvjet.

try

{

throw new CustomException("");

}

catch (CustomException ex) if (ex.Message == "")

{

//control will come in this catch block

}

catch (CustomException ex) if (ex.Message == "")

{

//control will not come in this catch block

}

Podrška za asinkronost u catch-u i konačno blokovima

Ovo je zaista sjajna karakteristika. Iznimke često prijavljujemo u datoteku ili bazu podataka. Takve su radnje dugotrajne i dugotrajne jer vam je potreban pristup disku za obavljanje I / O. U takvim situacijama bilo bi sjajno ako možete upućivati ​​asinkrone pozive unutar svojih blokova iznimki. Možda ćete također trebati izvršiti neke operacije čišćenja u konačno bloku koje mogu zahtijevati puno resursa i / ili oduzimati vrijeme.

S C # 6 više ne morate blokirati trenutnu nit dok izvodite takve radno intenzivne ili dugotrajne operacije. Sljedeći isječak koda ilustrira kako možete koristiti ključnu riječ await u catchu i na kraju blokira.

public async Task ProcessAsync()

{

try

{

//some code that might throw an exception

}

catch

{

await Task.Delay(5000);

}

finally

{

await Task.Delay(1000);

}

}

Sljedeći isječak koda pokazuje da možete pričekati poziv prilagođene metode LogExceptionAsync () za prijavu iznimke.

try

{

//code that might throw an exception

}

catch (Exception exception)

{

await LogExceptionAsync(exception);

}

Podrška za statičke izjave "korištenja"

Ovo je još jedna lijepa nova značajka u C # 6 koja vam omogućuje pozivanje statičke metode bez potrebe za eksplicitnim referencama. Evo primjera.

using System;

using System.Console;

public class Program

{

private static void Main()

{

WriteLine("New features in C# 6");

}

}

Kao što možete vidjeti u gornjem isječku koda, više ne morate izričito navesti vrstu prilikom pozivanja statičke metode WriteLine () koja pripada klasi System.Console. U osnovi, ova značajka promiče čistiji kôd - kôd koji je lakši za čitanje, pisanje i održavanje.

Automatski pokretači svojstava

Ova značajka omogućuje vam postavljanje vrijednosti svojstava točno na mjesto na kojem su deklarirana.

class Customer

{

public string FirstName { get; set; } = "Joydip";

public string LastName { get; set; } = "Kanjilal";

public int Age { get; set; } = 44;

}

U ranijim verzijama C # morali ste često koristiti zadane konstruktore za postavljanje zadanih vrijednosti svojstvima u klasi.

Evo još jednog primjera koji ilustrira sintaksu prečaca za inicijalizaciju svojstva u točki deklaracije za koju postavljač nije definiran.

class LogManager

{

public static LogManager Instance { get; } =

new LogManager();

}

Pokretači rječnika

Ova vam značajka omogućuje inicijalizaciju zadanih vrijednosti u Rječniku s mnogo manje koda. Evo primjera koji to ilustrira.

class Program

{

static void Main(string[] args)

{

Dictionary dict = new Dictionary()

{

["USA"] = "Washington DC",

["England"] = "London",

["India"] = "New Delhi"

};

}

}

Kao što možete vidjeti u gornjem isječku koda, rječnik je inicijaliziran sa zadanim vrijednostima na mjestu gdje je deklariran. Puno ljepši pristup u usporedbi s ranijim verzijama jezika C #, zar ne?

Primarni konstruktor

Ovo je opet izvrsna nova značajka - uklanja bol zbog pisanja koda za inicijalizaciju podataka podataka klase iz parametara u metodi konstruktora. Drugim riječima, ova značajka pruža sintaksički prečac za definiciju konstruktora u klasi.

Evo primjera koji ilustrira kako se mogu koristiti primarni konstruktori.

class Employee(string firstName, string lastName, string address)

{

public string FirstName { get; set; } = firstName;

public string LastName { get; set; } = lastName;

public string Address { get; set; } = address;

}

Za više informacija o novim značajkama i poboljšanjima u C # 6 možete pogledati ovaj MSDN članak.