2011-08-16 26 views
2

对于我来说,我似乎无法理解什么是可选参数。那么,我的意思是,他们会使用什么样的程序,以及如何使用它们?同样的事情适用于命名参数,我似乎无法完全掌握任何一件事情。我知道可选参数有助于保持重载方法的数量。这就是它。如果有人能帮助我完全理解这些用途/如何使用它们,我将不胜感激。如何在C#4.0中使用可选/命名参数

回答

0

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

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

0

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

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; 

,并呼吁,而不是C#这这将是更多的时候它

[self getThisFromInteger: 24]; 

调用方法时,你实际上是在打字的命名参数像

self.getThis(24); 

希望这有助于一些。

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("[email protected]", "Important!", "Something broke - fix it!", null, false, "", MailPriority.High, null, false) 
// If we didn't have named parameters 
sendEmail("[email protected]", "Important!", "Something broke - fix it!", null, false, "", MailPriority.High) 
// Using both optional and named parameters to full advantage. 
sendEmail("[email protected]", "Important!", "Something broke - fix it!", priority: MailPriority.High) 

最后这三个是更容易使用和日后阅读。

相关问题