Использование именованные и необязательные параметры в C#

Дополнительные параметры - одно из немногих дополнений в последних версиях Visual Studio, которые действительно полезны. Обычно я пытаюсь опубликовать примеры в более старой версии C#, потому что кому-то легче переносить старый пример в более новую версию, чем переносить недавний пример в более старую версию. Большая часть языка C# осталась неизменной в течение длительного времени, так что это не проблема. Тем не менее, C# включает в себя несколько полезных функций, которые были добавлены относительно недавно.

Именованные и необязательные параметры были добавлены с C# 2010.

Именованные аргументы позволяют использовать имена параметров при вызове метода. Например, предположим, что класс Person имеет конструктор, который принимает параметры: name, address, email, sms_phone, voice_phone и fax. Тогда ваш код мог бы вызвать конструктор следующим образом:

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

В то время как именованные аргументы дают некоторую выгоду, они действительно не так уж увлекательны, пока вы не объедините их с необязательными параметрами. Чтобы сделать параметр необязательным, следуйте ему со значением по умолчанию в объявлении метода. Например, в следующем коде показан конструктор класса Person с адресом, email, sms_phone, voice_phone и fax необязательно.

Теперь программа может использовать следующий код для создания нового объекта Person, указывая только аргумент name (который требуется, поскольку он не имеет значения по умолчанию в объявлении конструктора) и аргумент email.

Это не только удобно, но и дает вам новые возможности, которых у вас раньше не было. Предположим, вы хотите, чтобы конструктор требовал name, но не других параметров. Без дополнительных параметров вы можете создать несколько перегруженных версий конструктора, который принимает (name), который принимает (name, address), который принимает (имя, адрес, адрес электронной почты) и т. д.

Это позволит вам создавать объекты Person, опуская некоторые аргументы, но это не позволит вам опустить их в любой комбинации. Например, вы не можете указать name и email без address. Даже если вы захотели сделать перегруженные конструкторы для всех 32 возможных комбинаций (если я правильно подсчитал), компилятор не смог бы рассказать обо всех версиях, потому что все аргументы являются строками.

Именованные и необязательные параметры позволяют предоставлять и опускать аргументы в любой комбинации с одним конструктором.

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

Это работает, но снова позволяет обрабатывать определенные комбинации пропущенных аргументов и требует много разных версий конструктора.

Другой подход состоял бы в том, чтобы позволить вызывающему коду передавать null или какое-либо другое значение для «опускать» аргументы, а затем заставлять код проверять каждый, чтобы увидеть, является ли это null как в следующем коде.

Это намного более громоздко и неэффективно, чем использование названных и необязательных параметров.

Источник: http://csharphelper.com/blog/2017/10/use-named-and-optional-parameters-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *