Nuove funzionalità in C # 6

C # 6 viene fornito con Visual Studio 2015 e presenta alcune nuove interessanti funzionalità. Ci sono molte funzionalità che promuovono meno ingombro di codice e la scrittura di codice più pulito e gestibile. In questo post, vorrei illustrarvi alcune delle nuove funzionalità in linguaggio C #.

Filtri di eccezione

I filtri per le eccezioni non sono una novità in VB, ora questa funzionalità è disponibile anche in C #. Questi consentono di filtrare le eccezioni nel codice in base alla gravità. Ecco un esempio.

try

{

//some code that might throw an exception

}

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

{

ExceptionManager.HandleException(exception);

}

Il codice precedente controlla se l'eccezione generata è di tipo SqlException. In caso contrario, viene gestita l'eccezione. Ecco un altro esempio che mostra come controllare la proprietà Message dell'oggetto eccezione e specificare una condizione di conseguenza.

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

}

Supporto per asincronia in cattura e infine blocchi

Questa è davvero una grande caratteristica. Spesso registriamo eccezioni in un file o in un database. Tali operazioni richiedono molte risorse e richiedono molto tempo in quanto è necessario accedere al disco per eseguire l'I / O. In tali situazioni, sarebbe fantastico se fosse possibile effettuare chiamate asincrone all'interno dei blocchi di eccezioni. Potrebbe anche essere necessario eseguire alcune operazioni di pulizia nel blocco finalmente che potrebbero richiedere molte risorse e / o richiedere molto tempo.

Con C # 6 non è più necessario bloccare il thread corrente durante l'esecuzione di operazioni che richiedono molto tempo o risorse. Lo snippet di codice fornito di seguito illustra come utilizzare la parola chiave await nei blocchi catch e infine.

public async Task ProcessAsync()

{

try

{

//some code that might throw an exception

}

catch

{

await Task.Delay(5000);

}

finally

{

await Task.Delay(1000);

}

}

Il frammento di codice seguente mostra che è possibile attendere una chiamata al metodo personalizzato LogExceptionAsync () per registrare l'eccezione.

try

{

//code that might throw an exception

}

catch (Exception exception)

{

await LogExceptionAsync(exception);

}

Supporto per istruzioni statiche "using"

Questa è un'altra bella nuova funzionalità in C # 6 che consente di richiamare un metodo statico senza la necessità di riferimenti espliciti. Ecco un esempio.

using System;

using System.Console;

public class Program

{

private static void Main()

{

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

}

}

Come puoi vedere nello snippet di codice sopra, non è più necessario specificare esplicitamente il tipo quando si chiama il metodo WriteLine () statico che appartiene alla classe System.Console. In sostanza, questa caratteristica promuove un codice più pulito: codice più facile da leggere, scrivere e mantenere.

Inizializzatori di proprietà automatiche

Questa funzione consente di impostare i valori delle proprietà proprio nel luogo in cui vengono dichiarati.

class Customer

{

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

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

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

}

Nelle versioni precedenti di C # era necessario utilizzare spesso i costruttori predefiniti per impostare i valori predefiniti per le proprietà nella classe.

Ecco un altro esempio che illustra una sintassi di scorciatoia per inizializzare una proprietà nel punto di dichiarazione per il quale non è stato definito un setter.

class LogManager

{

public static LogManager Instance { get; } =

new LogManager();

}

Inizializzatori di dizionario

Questa funzione consente di inizializzare i valori predefiniti in un dizionario con molto meno codice. Ecco un esempio che lo illustra.

class Program

{

static void Main(string[] args)

{

Dictionary dict = new Dictionary()

{

["USA"] = "Washington DC",

["England"] = "London",

["India"] = "New Delhi"

};

}

}

Come puoi vedere nello snippet di codice sopra, il dizionario è stato inizializzato con valori predefiniti nel punto in cui è stato dichiarato. Un approccio molto migliore rispetto alle versioni precedenti del linguaggio C #, non è vero?

Costruttore primario

Anche questa è una nuova funzionalità eccellente: elimina il problema di dover scrivere codice per inizializzare i membri dei dati di una classe dai parametri in un metodo di costruzione. In altre parole, questa funzione fornisce una scorciatoia sintattica per la definizione di un costruttore in una classe.

Ecco un esempio che illustra come utilizzare i costruttori primari.

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;

}

È possibile fare riferimento a questo articolo di MSDN per ulteriori informazioni sulle nuove funzionalità e sui miglioramenti in C # 6.