Вы можете упростить свой синтаксис, эффективно применив эти методы

C # - фантастический язык, потому что он постоянно развивается, упрощая синтаксис и делая ваш код более выразительным. Члены, воплощающие выражения, были выпущены в C # 6 и дополнительно усовершенствованы в C # 7. В то время я был еще младшим разработчиком и еще не решил, что C # и .NET будут моей долгосрочной целью.

Я не собираюсь говорить, что эта функция «заключила сделку» для меня и .NET, но это определенно та функция, которую мне больше всего не хватает при использовании любого другого языка.

Основы членов с выражением

Самая простая форма - просто взять любое существующее свойство, доступное только для чтения, и сжать его.

При преобразовании в член, содержащий выражение, это становится:

Вы даже можете использовать его для упрощения тел методов:

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

Члены с выражением могут уменьшить шаблонный код

Еще не впечатлены? Что, если бы я сказал вам, что вы можете использовать члены, воплощающие выражение, в полных свойствах? Это означает, что вы можете использовать этот метод как для геттера, так и для сеттера, чтобы уменьшить беспорядок, связанный с полностью реализованным свойством C #.

Это немного эффективнее при чтении вашего кода, но, честно говоря, это не * это * впечатляющее, пока у вас не будет дополнительной логики для вызова вашего геттера / сеттера. Извлечение этой логики в метод и использование параметра ref для вашего поля может помочь прояснить, как работает ваш код.

Члены с телом выражений можно использовать в конструкторах

Самый повторяющийся шаблон, который я вижу в моем собственном коде C #, - это когда я устанавливаю поля класса в конструкторах. Он выполняет критическую задачу инициализации объекта, но если кто-то сосредоточен на создании * простых * и * разборчивых * объектов с понятными API-интерфейсами, задача часто становится повторяющейся.

Когда есть только одно присваивание, члены, воплощающие выражение, чрезвычайно полезны:

Это значительно упрощает ваши конструкторы с одним присваиванием. Однако вы также можете комбинировать это с синтаксисом кортежа, чтобы выполнять несколько назначений одновременно.

Этот синтаксис назначит поля в том порядке, в котором они появляются в кортеже.

Примечание: имейте в виду, что если все ваши параметры имеют схожие типы, например `string`, то с помощью этого синтаксиса можно легко получить их в неправильном порядке. Однако при компиляции будут обнаружены поля разных типов. Таким образом, я бы рекомендовал это только при назначении простых конструкторов с различными типами для полей.

В заключение

Надеюсь, вам понравился этот краткий обзор одной из моих любимых функций языка C #. Эту языковую функцию можно использовать для улучшения читаемости, определения областей для инкапсуляции логики и для упрощения механического построения объектов. По мере того, как C # продолжает развиваться, вероятно, появятся и другие улучшения, которые улучшат выразительность и общую чистоту языка.