Posted on 30. July 2021

Программы верхнего уровня C # 9 и выражения с целевым типом

.NET 5 (выпущенный в ноябре 2020 г.) включает поддержку C # 9, основной новой версии языка программирования C #. В этой серии статей исследуются новые возможности основного языка программирования .NET. В этой первой статье будут рассмотрены операторы верхнего уровня, а также новые и условные выражения целевого типа. Эти функции делают C # менее многословным и могут использоваться в повседневных программах.

Читать всю серию

Прочтите другие статьи этой серии, посвященные новым возможностям C # 9:

Кроме того, в прошлом году была опубликована серия статей о C # 8. Вы можете найти эти статьи здесь:

Программы высшего уровня

Программы верхнего уровня позволяют писать основной метод вашего приложения без добавления  class с методом  static Main. Например:

// using directives

using static System.Console;

using System.Threading.Tasks;

 

// program statements

await Task.Delay(100);

WriteLine("Hello " + (args.Length > 0 ? args[0] : "world!"));

return 0;

 

// local functions

// class/namespace declarations

void Foo() { }

class Foo { }

 

Операторы программы добавляются непосредственно в файл C # без включающего метода, класса или пространства имен. Вы можете разместить директивы   using перед операторами программы. При желании после операторов вы можете определить локальные функции, типы и пространства имен.

В этом примере также показаны некоторые интересные особенности программирования верхнего уровня. Программа может быть асинхронной: мы можем использовать ключевое слово  await. Аргументы программы доступны с помощью параметра args, и программа может возвращать код выхода.

Новые выражения с целевым типом

Начиная с C# 3, можно опустить тип объявления для переменных с помощью ключевого слова var. Компилятор наследует тип от выражения:

var person = new Person();

 

В C# 9 вы также можете опустить тип из оператора new  и заставить компилятор унаследовать тип от типа объявления:

Person p1 = new();
Person p2 = new("Tom");
Person p3 = new() { FirstName = "Tom" };

 

Преимущество этого синтаксиса в том, что объявления типов аккуратно выровнены по левой стороне. Как вы можете видеть в примере, вы можете передавать аргументы конструктора и использовать инициализаторы объектов.

Выражения new с целевым типом также работают, когда вы передаете аргумент методу. Однако менее ясно, какой тип построен:

PrintPerson(new());

 

Условные выражения целевого типа

В C# 9 ветви? .. : ..  выражений могут иметь разные типы, если они оба преобразуются в целевой тип:

Control c = true ? button : form;

 

Этот пример работает в C# 9, хотя кнопка и форма имеют разные типы, поскольку обе они преобразуются в целевой тип (Control). Раньше ветки должны были иметь один и тот же тип, поэтому требовалось вводить приведение, если они не совпадали.

Заключение

В статье были рассмотрены программы верхнего уровня, которые делают написание основного метода менее подробным. Также новые выражения с целевым типом, которые обеспечивают удобный синтаксис для выравнивания типов объявлений переменных без необходимости дублировать тип для new оператора. И, наконец, увидели, как условные выражения с целевым типом позволяют опускать приведение типов, когда обе ветви преобразуются в целевой тип.

В следующей статье будут рассмотрены новые возможности шаблонов паттернов в C# 9.

Вы можете использовать C# 9 с .NET 5 SDK, который доступен в Red Hat Enterprise Linux, Red Hat OpenShift, Fedora, Windows, macOS и других дистрибутивах Linux.

 

 

Источник



Comments are closed