Вы можете упростить свой синтаксис, эффективно применив эти методы
C # - фантастический язык, потому что он постоянно развивается, упрощая синтаксис и делая ваш код более выразительным. Члены, воплощающие выражения, были выпущены в C # 6 и дополнительно усовершенствованы в C # 7. В то время я был еще младшим разработчиком и еще не решил, что C # и .NET будут моей долгосрочной целью.
Я не собираюсь говорить, что эта функция «заключила сделку» для меня и .NET, но это определенно та функция, которую мне больше всего не хватает при использовании любого другого языка.
Основы членов с выражением
Самая простая форма - просто взять любое существующее свойство, доступное только для чтения, и сжать его.
При преобразовании в член, содержащий выражение, это становится:
Вы даже можете использовать его для упрощения тел методов:
Это экономит ваше время и место на экране. В большинстве соглашений стиля C # говорится, что открывающая скобка {
и закрывающая скобка }
принадлежат новым строкам (за некоторыми исключениями). Вы можете поспорить с руководством по стилю, но в большей команде это, вероятно, проигрышная битва. Эта функция решает эту проблему, полностью опуская скобки.
Члены с выражением могут уменьшить шаблонный код
Еще не впечатлены? Что, если бы я сказал вам, что вы можете использовать члены, воплощающие выражение, в полных свойствах? Это означает, что вы можете использовать этот метод как для геттера, так и для сеттера, чтобы уменьшить беспорядок, связанный с полностью реализованным свойством C #.
Это немного эффективнее при чтении вашего кода, но, честно говоря, это не * это * впечатляющее, пока у вас не будет дополнительной логики для вызова вашего геттера / сеттера. Извлечение этой логики в метод и использование параметра ref для вашего поля может помочь прояснить, как работает ваш код.
Члены с телом выражений можно использовать в конструкторах
Самый повторяющийся шаблон, который я вижу в моем собственном коде C #, - это когда я устанавливаю поля класса в конструкторах. Он выполняет критическую задачу инициализации объекта, но если кто-то сосредоточен на создании * простых * и * разборчивых * объектов с понятными API-интерфейсами, задача часто становится повторяющейся.
Когда есть только одно присваивание, члены, воплощающие выражение, чрезвычайно полезны:
Это значительно упрощает ваши конструкторы с одним присваиванием. Однако вы также можете комбинировать это с синтаксисом кортежа, чтобы выполнять несколько назначений одновременно.
Этот синтаксис назначит поля в том порядке, в котором они появляются в кортеже.
Примечание: имейте в виду, что если все ваши параметры имеют схожие типы, например `string`, то с помощью этого синтаксиса можно легко получить их в неправильном порядке. Однако при компиляции будут обнаружены поля разных типов. Таким образом, я бы рекомендовал это только при назначении простых конструкторов с различными типами для полей.
В заключение
Надеюсь, вам понравился этот краткий обзор одной из моих любимых функций языка C #. Эту языковую функцию можно использовать для улучшения читаемости, определения областей для инкапсуляции логики и для упрощения механического построения объектов. По мере того, как C # продолжает развиваться, вероятно, появятся и другие улучшения, которые улучшат выразительность и общую чистоту языка.