Как использовать Необязательные / Именованные параметры в C # 4.0 - PullRequest
2 голосов
/ 16 августа 2011

Я, по-видимому, не могу понять, для чего используются дополнительные параметры. Я имею в виду, в каких программах они будут использоваться и как? То же самое относится и к именованным параметрам, я просто не могу полностью понять, что именно. Я знаю, что Дополнительные параметры помогают уменьшить количество перегруженных методов. Вот об этом. Если бы кто-то мог помочь мне полностью понять, для чего они используются / как их использовать, я был бы очень признателен.

Ответы [ 3 ]

0 голосов
/ 16 августа 2011

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

List<string> SearchStuff(string searchString, Date startDate, Date endDate);

Позже вы можете начать думать о разбивке на страницы и захотите установить по умолчанию 25 результатов, но при этом вызывающая сторона сможет определить это и использовать дополнительный параметр, чтобы помочь вам, например:

List<string> SearchStuff(string searchString, Date startDate, Date endDate, int pageSize = 25);

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

Что касается именованных параметров, я не уверен, что использовал их в C # (или, если возможно, даже). Однако в Objective-c они используются постоянно:

- (NSString *) getThisFromInteger:(NSInteger)myInteger;

и при вызове метода вы фактически вводите именованные параметры при вызове его

[self getThisFromInteger: 24];

в отличие от C #, это было бы больше похоже на

self.getThis(24);

Надеюсь, это поможет некоторым.

0 голосов
/ 05 октября 2012

Джон хорошо описывает использование необязательных параметров, но для добавления объяснения именованных параметров: если у вас много необязательных параметров, у вас есть два варианта, если вы хотите указать шестой: указать все ранее необязательные параметры или используйте именованный параметр, чтобы просто установить этот конкретный параметр.

Пример:

public static void sendEmail(string to, string subject, string body, string[] attachmentFiles = null, bool isHTML = false, string onBehalfOf = "", MailPriority priority = MailPriority.Normal, string BCCAddress = null, bool isWeb = false)

Если я хочу отправить высокоприоритетное электронное письмо, я могу выбрать:

// If we didn't have optional parameters
sendEmail("me@me.com", "Important!", "Something broke - fix it!", null, false, "", MailPriority.High, null, false)
// If we didn't have named parameters
sendEmail("me@me.com", "Important!", "Something broke - fix it!", null, false, "", MailPriority.High)
// Using both optional and named parameters to full advantage.
sendEmail("me@me.com", "Important!", "Something broke - fix it!", priority: MailPriority.High)

Последний из этих трех гораздо проще использовать и прочитать позже.

0 голосов
/ 16 августа 2011

Необязательные параметры - это их имена: для необязательных параметров.

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

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