Нови функции в C # 6

C # 6 се доставя с Visual Studio 2015 и предлага някои интересни нови функции. Има много функции, които насърчават по-малко бъркотия в кода и по-чист, поддържаем код. В тази публикация бих искал да ви преведа някои от новите функции на езика C #.

Филтри за изключения

Филтрите за изключения не са нови в VB - сега имате тази функция и в C #. Те ви позволяват да филтрирате изключения във вашия код въз основа на тежестта. Ето един пример.

try

{

//some code that might throw an exception

}

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

{

ExceptionManager.HandleException(exception);

}

Горният код проверява дали изхвърленото изключение е от тип SqlException. Ако не, изключението се обработва. Ето още един пример, който показва как можете да проверите свойството Message на обекта за изключение и съответно да зададете условие.

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

}

Поддръжка за асинхронност в catch и накрая блокове

Това наистина е страхотна функция. Често регистрираме изключения във файл или база данни. Такива операции изискват много ресурси и отнемат много време, тъй като ще ви е необходим достъп до диска, за да извършите I / O. В такива ситуации би било чудесно, ако можете да правите асинхронни повиквания във вашите блокове за изключения. Може да се наложи да извършите някои операции за почистване в блока окончателно, които може да изискват много ресурси и / или да отнемат много време.

С C # 6 вече не е необходимо да блокирате текущата нишка, докато извършвате такива интензивни или отнемащи време операции. Даденият по-долу кодов фрагмент илюстрира как можете да използвате ключовата дума await в catch и накрая блокира.

public async Task ProcessAsync()

{

try

{

//some code that might throw an exception

}

catch

{

await Task.Delay(5000);

}

finally

{

await Task.Delay(1000);

}

}

Следният кодов фрагмент показва, че можете да изчакате извикване на LogExceptionAsync () персонализиран метод за регистриране на изключение.

try

{

//code that might throw an exception

}

catch (Exception exception)

{

await LogExceptionAsync(exception);

}

Поддръжка на статични оператори за "използване"

Това е друга хубава нова функция в C # 6, която ви позволява да извиквате статичен метод, без необходимостта от изрични препратки. Ето един пример.

using System;

using System.Console;

public class Program

{

private static void Main()

{

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

}

}

Както можете да видите в горния кодов фрагмент, вече не е необходимо изрично да указвате типа при извикване на статичния метод WriteLine (), който принадлежи към класа System.Console. По същество тази функция насърчава по-чист код - код, който е по-лесен за четене, писане и поддръжка.

Автоматични инициализатори на свойства

Тази функция ви позволява да задавате стойностите на свойствата точно на мястото, където са декларирани.

class Customer

{

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

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

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

}

В по-ранните версии на C # често трябваше да използвате конструктори по подразбиране, за да задавате стойности по подразбиране на свойствата в класа.

Ето още един пример, който илюстрира синтаксис на пряк път за инициализиране на свойство в точката на деклариране, за което задавачът не е дефиниран.

class LogManager

{

public static LogManager Instance { get; } =

new LogManager();

}

Речникови инициализатори

Тази функция ви позволява да инициализирате стойности по подразбиране в речник с много по-малко код. Ето пример, който илюстрира това.

class Program

{

static void Main(string[] args)

{

Dictionary dict = new Dictionary()

{

["USA"] = "Washington DC",

["England"] = "London",

["India"] = "New Delhi"

};

}

}

Както можете да видите в горния кодов фрагмент, речникът е инициализиран със стойности по подразбиране в точката, в която е деклариран. Много по-добър подход в сравнение с по-ранните версии на езика C #, нали?

Първичен конструктор

Това отново е отлична нова функция - тя премахва болката от необходимостта да пишете код, за да инициализирате членове на данни от клас от параметрите в метода на конструктора. С други думи, тази функция осигурява синтактичен пряк път за дефиницията на конструктор в клас.

Ето пример, който илюстрира как могат да се използват първични конструктори.

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;

}

Можете да се обърнете към тази статия на MSDN за повече информация относно новите функции и подобрения в C # 6.