如何在C#4.0中使用Optional / Named参数

时间:2011-08-16 13:59:19

标签: c#-4.0 optional-parameters named-parameters

对于我的生活,我似乎无法理解可选参数的用途。我的意思是,他们会使用什么样的程序,以及如何使用?同样的事情适用于命名参数,我似乎无法完全掌握任何一件事。我知道可选参数有助于减少重载方法的数量。多数民众赞成。如果有人可以帮助我完全理解这些用于/如何使用它们,我将非常感激。

3 个答案:

答案 0 :(得分:0)

可选参数的名称是:可选参数。

唯一非常重要的是,参数的默认值被编译到调用代码中。 这意味着,如果更改参数的默认值,则必须重新编译调用程序集,否则它们仍将使用旧的默认值。

答案 1 :(得分:0)

我通常在许多不同对象可能调用的方法上使用可选参数。例如,如果您有一个处理搜索的应用程序,您可能会使用参数

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

稍后您可能会开始考虑分页并希望将其默认为25个结果但仍然允许调用者确定它并且可以使用可选参数来帮助您这样做:

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

通过在其上设置值,您可以看到的pageSize是可选的。调用者可以根据需要传递pageSize,也可以将其全部省略,并使用默认值。

至于命名参数,我不确定我是否在C#中使用过它们(或者你是否可以)。然而,在Objective-c中,它们被不断使用:

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

并且在调用方法时,实际上是在调用它时输入命名参数

[self getThisFromInteger: 24];

而不是C#,这更像是

self.getThis(24);

希望这会有所帮助。

答案 2 :(得分:0)

John很好地介绍了可选参数的使用,但添加了对命名参数的解释:如果你有很多可选参数,如果你想指定第6个,你有两个选择:指定所有早期的可选参数,或者使用命名参数来设置一个特定的参数。

示例:

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)

这三个中的最后一个更容易使用,稍后阅读。