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.