I've begun to notice at times when I'm making method calls in C# that the names of the parameters for the method I'm calling will show up in the intellisense list appended with a colon, and that I can then format the method call thusly:
MethodCall(parameter1:value1, parameter2:value2);
Is this a new language feature? It reminds me of the way you can call stored procedures in SQL and specify parameter names like so:
spDoSomeStuff @param1 = 1, @param2 = 'other param'
Is this a similar feature? If so, to what end? If not, what is it and what is it to be used for.
It's a new feature. See here: http://msdn.microsoft.com/en-us/library/dd264739.aspx
Named parameters are standard in ObjectiveC for instance. It takes some time to get used to them but they are a good thing. Only from looking you can tell what a parameter is meant for.
Named parameters allow you explicitly set the value of arguments in a custom order independent of the signature. Method signatures are defined by the argument types, ie, Foo( int i, bool b ), which will only accept arguments of type int and bool in that order. Named arguments allow you to pass b first and i second.
It is worth mentioning, unlike optional parameters, you can skip certain arguments and pass only the parameters you are interested in.
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);
}
Scott Gu has introduced this new feature in his blog:
Optional Parameters and Named Arguments in C# 4
It's the Named and Optional Parameters that came in with C# 4.
@Krumelur said that "Named parameters are standard in ObjectiveC for instance."
That's not actually correct. Objective-C uses an infix notation, so that this message call:
[foo setRed:255 Green:255 Blue:0];
is the setRed:Green:Blue: message (including those colons!) with the (255,255,0) arguments interspersed within the message name.
Although, granted, at first blush Objective-C's syntax gives the appearance that Objective-C uses named parameters. But that is not actually correct, and misunderstanding the difference can be an impediment for learning Objective-C.
(I would have answered in a comment, but I somehow lost all my reputation points and I'm starting over. Drat. C'est la vie.)