使用参数名称和冒号调用C#方法

时间:2011-03-10 16:25:26

标签: c# language-features method-call

我开始注意到,当我在C#中进行方法调用时,我调用的方法的参数名称将显示在附加冒号的intellisense列表中,然后我可以因此格式化方法调用:

MethodCall(parameter1:value1, parameter2:value2);

这是一种新的语言功能吗?它让我想起了在SQL中调用存储过程的方式,并指定参数名称,如下所示:

spDoSomeStuff @param1 = 1, @param2 = 'other param'

这是一个类似的功能吗?如果是这样,到底是什么?如果没有,它是什么以及它用于什么。

6 个答案:

答案 0 :(得分:36)

这是一项新功能。见这里:http://msdn.microsoft.com/en-us/library/dd264739.aspx 例如,命名参数是ObjectiveC中的标准参数。它需要一些时间来适应它们,但它们是一件好事。只有从你看,你可以告诉参数是什么意思。

答案 1 :(得分:20)

命名参数允许您以独立于签名的自定义顺序显式设置参数的值。方法签名由参数类型定义,即Foo(int i,bool b),它只接受int和bool类型的参数。命名参数允许您先传递b和第二个传递。

答案 2 :(得分:11)

值得一提的是,与可选参数不同,您可以跳过某些参数并仅传递您感兴趣的参数。

public void Example(int required, string StrVal = "default", int IntVal = 0)
{
    // ...
}

public void Test()
{
    // This gives compiler error
    // Example(1, 10);

    // This works
    Example(1, IntVal:10);
}

答案 3 :(得分:5)

Scott Gu在他的博客中介绍了这个新功能:

Optional Parameters and Named Arguments in C# 4

答案 4 :(得分:2)

这是C#4带来的Named and Optional Parameters

答案 5 :(得分:0)

@Krumelur说“例如,命名参数是ObjectiveC中的标准参数。”

这实际上并不正确。 Objective-C使用中缀表示法,以便此消息调用:

 $(".select").click(function(){
    debugger;
    var lang = $('#lang').val();
    var lang1 = lang;
});

setRed:Green:Blue:消息(包括那些冒号!),其中(255,255,0)个参数散布在消息名称中。

尽管如此,乍一看,Objective-C的语法给出了Objective-C使用命名参数的外观。但这实际上并不正确,误解差异可能会妨碍学习Objective-C。

(我会在评论中回答,但我不知何故失去了所有的声望点,我重新开始.Drat.C'est la vie。)