В данной публикации я опишу 10 наиболее важных по
моему мнению возможностей языка, которые 4как ожидается появятся в C# 6.0. В
настоящее время C# 6 доступен вместе с Visual Studio 2015 Preview для разработчиков. Я использовал CTP 4 Visual Studio VNext для создания примеров исходного кода
описанных в данной статье.
10. Выражение как тело метода
class
Employee
{
// Method with only the expression
public static int
CalculateMonthlyPay(int dailyWage)
=> dailyWage * 30;
}
9. ? – Условный оператор доступа
В ранних версиях языка C#, вам всегда нужно было писать
явную проверку на NULL перед использованием объекта или проперти, как
показано ниже.
private void GetMiddleName(Employee employee)
{
string employeeMiddleName = "N/A";
if (employee != null && employee.EmployeeProfile
!= null)
employeeMiddleName =
employee.EmployeeProfile.MiddleName;
}private void GetMiddleName(Employee employee)
{
string employeeMiddleName =
employee?.EmployeeProfile?.MiddleName ?? "N/A";
}
8. Инициализаторы авто-проперти
Используя возможность инициализации
авто-проперти, разработчик может инициализировать проперти без использование
приватного set и приватной локальной переменной. Код представленный ниже
демонстрирует это.
class PeopleManager
{
public List Roles { get; } =
new List() { "Employee", "Managerial"};
}
7. Основной конструктор
Основной конструктор – позволяет передавать
параметры конструктора в объявлении класса, и исзавляет от написания отдельного
конструктора. В области видимости параметров значение основного конструктора находится
весь класс, но их использование возможно только в процессе инициализации
класса. Эту возможность удобно использовать с инициализаторами авто-проперти.
// Primary constructor
class Basket(string item, int price)
{
// Using primary constructor parameter values
// to do auto property initialization.
public string Item { get; } = item;
public int Price { get; } = price;
}
6. Объявление OUT параметра при вызове метода.
Это одно из моих любимых новшеств, потому что я никогда
не был сторонником разделения объявления переменной и вызова метода. Это
новшество позволит объявлять переменную для OUT параметра непосредственно в процессе
вызова, как показано ниже.
public bool ConvertToIntegerAndCheckForGreaterThan10
(string value)
{
if (int.TryParse(value, out int convertedValue)
&& convertedValue > 10)
{
return true;
}
return false;
}
Обратите внимание, что та же переменная используется и в другом месте
условия if.
5. Await в блоке Catch
Это важно несинтаксическое усовершенствование,
которое появится в C#
6. Ключевое слово await может быть использовано внутри блока catch и finally. Это предоставляет
возможность выполнять асинхронную обработку исключений или покидать процесс в
случае, если исключение произошло внутри асинхронного процесса.
public async void Process()
{
try
{
Processor processor = new Processor();
await processor.ProccessAsync();
}
catch (Exception exception)
{
ExceptionLogger logger = new ExceptionLogger();
// Catch operation also can be aync now!!
await logger.HandleExceptionAsync(exception);
}
}
4. Фильтры исключений
Исключения могут быть легко и просто отфильтрованы
в блоке catch с помощью
C# 6. Представленный
пример показывает как можно обработать все исключения кроме SqlException.
public async void Process()
{
try
{
DataProcessor processor = ne
}
// Catches and handles only non sql exceptions
catch (Exception exception) if(exception.GetType()
!= typeof(SqlException))
{
ExceptionLogger logger = new ExceptionLogger();
logger.HandleException(exception);
}
}
3. Поддержка Using
Эта возможность разгрузить код от регулярного повторения
статического класса для вызова его методов. Как и с неймспейсами, теперь
использование статического класса можно подключить с использованием using.
using System;
// A static class inclusion
using System.Console;
namespace CSharp6Demo
{
class Program
{
static void Main(string[] args)
{
WriteLine("Console. is not required
as it is included in the usings!");
}
}
}
2. Интерполяция строк
Это может быть похожим на усовершенствование String.Format, вместо плейсхолдеров, вы можете
непосредственно указвать строковое выражение или перенменные.
static void Main(string[] args)
{
string name = "Robert";
string car = "Audi";
WriteLine("\{name}'s favourite car is
{car}!");
}
1. Roslyn – новый компилятор для C# и VB
Roslyn – компилятор для языка C# 6; он имеет большое количество усовершенствований и, что самое
главное, он открытый. Компилятор Roslyn также доступен как сервис, другими
словами “компилятор как сервис” потому что вы можете использовать библиотеки Roslyn API для расширения
функцтональности. Это только наброски того что может Roslyn. Я оставлю возможность узнать
больше о компиляторе читателям самостоятельно.
Я надеюсь, статья сжато продемонстрировала
возможности которые могут появится в RTM версии C# 6. Хотя стоит отдать должное – тут нету
чего то сверхестественного, все усовершенствования являются эволюционными, и
позволяют сделать код немного более чистым, наглядным и простым. Интеграция с Roslyn это очевидно самая
главная фишка.