2

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

4

3 回答 3

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);

希望这会有所帮助。

于 2011-08-16T14:15:28.947 回答
0

可选参数是他们的名字:可选参数。

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

于 2011-08-16T14:06:47.240 回答
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)

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

于 2012-10-05T13:32:39.233 回答