Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1451. #ЗаметкиНаПолях Обзор Новых Функций C# 11. Окончание Предыдущие части: 1, 2-3, 4, 5-6 7. Статические абстракции в интерфейсах (официально включено в язык) Реализация уже была в C#10 в виде превью. Но в C# 11 она реализована официально как часть языка. В C# 8 добавлена возможность помещать статические элементы в интерфейс, но интерфейс должен был включать код реализации. В C#10 статические члены могут быть абстрактными, поэтому реализующий их класс может предоставить собственную реализацию. Звучит красиво, но немного сложно, пока вы не рассмотрите некоторые потенциальные варианты использования. Одним из наиболее востребованных является обобщённая математика, которая позволяет использовать операторы (реализованные как статические методы) для обобщённых типов. 8. Типы, ограниченные файлом (включено в релиз) Добавлен новый модификатор доступа file. Вы можете использовать его в классе или другом типе так же, как вы используете private или public:
file class CanvasUtils { … }
public class Canvas { … }
file делает тип доступным для кода в том же файле, но больше нигде. В примере выше класс Canvas может использовать CanvasUtils, если они находятся в одном файле. Если вы задумались над тем, что это новый способ организации кода, забудьте! Логическую и физическую организацию кода не стоит смешивать. Эта функция в первую очередь нужна для генераторов кода, потому что им нужен надёжный способ отделить свой код от «рукописных» частей проекта. Это разделение означает отсутствие конфликтов имен, утечки сведений о реализации, скрытия деталей при поиске через рефлексию и т.п. Если вы не пишете генератор кода, вам вероятно, вообще не пригодится эта функция. 9. Полуавтоматически реализуемые свойства (отложено) Ключевое слово field изначально планировалось для C#10, и даже было продемонстрировано на нескольких докладах Microsoft. Но эта функция не вошла в C#10, а теперь проблемы с реализацией не позволили ей попасть в C#11. Идея проста. Сегодня автоматически реализуемые свойства C# экономят значительный объём работы, но удобны не во всех сценариях. А когда они не работают, вам нужно вернуться к стандартной реализации свойств со всем шаблонным кодом для получения и установки. Ключевое слово field устраняет некоторые из этих ограничений, позволяя вам получить доступ к полю в автоматически реализуемом свойстве:
public class Employee
{
  public string Name
  { 
    get; 
    set => field = value.Trim();
  }
}

Т.е. вы можете продолжать использовать автоматически реализуемые свойства, даже если вам приходится иметь дело с валидацией, уведомлениями о событиях и т.п. Следить за обсуждением этой функции можно на GitHub. 10. Первичные конструкторы (отложено) Первичные конструкторы — это функция, которая автоматически генерирует базовый конструктор, принимающий параметры и устанавливающий соответствующие приватные поля. Ещё один пример стремления сократить количество шаблонного кода. Разработчики языка экспериментировали с различными реализациями первичных конструкторов по крайней мере в двух последних версиях. Но это не то изменение, которое мы хотели бы видеть в языке реализованным наполовину. Поэтому пока ждём финальной имплементации. Итого Любой разработчик языка скажет вам, что то, что не вошло в язык, более важно, чем то, что в него добавлено. Добавьте недоработанную функцию без надлежащего учёта потенциальных побочных эффектов, и она будет существовать вечно — или, по крайней мере, до тех пор, пока язык жив. Неудивительно, что разработчики C# — консерваторы, готовые ждать новых идей. Мы получили большую часть того, что ожидали, но две важные идеи всё ещё находятся в разработке для C#12. Подождём ноября. Источник: https://medium.com/young-coder/a-mostly-complete-guide-to-c-11s-final-features-d43e6c9aa727