Вызов метода C# с именем параметра и двоеточием
Я начал замечать время от времени, когда я делаю вызовы методов в C#, что имена параметров вызываемого метода будут отображаться в списке intellisense, добавленном с двоеточием, и что затем я могу отформатировать вызов метода таким образом:
MethodCall(parameter1:value1, parameter2:value2);
это новая функция языка? Это напоминает мне, как вы можете вызывать хранимые процедуры в SQL и указывать имена параметров следующим образом:
spDoSomeStuff @param1 = 1, @param2 = 'other param'
это аналогичная функция? Если да, то с какой целью? Если нет, то что является ли он и для чего он должен использоваться.
6 ответов
Это новая функция. Смотрите здесь: http://msdn.microsoft.com/en-us/library/dd264739.aspx Например, именованные параметры являются стандартными в ObjectiveC. Это займет некоторое время, чтобы привыкнуть к ним, но они хорошо. Только глядя, вы можете сказать, для чего предназначен параметр.
именованные параметры позволяют явно задать значение аргумента в произвольном порядке независимо от подписи. Сигнатуры методов определяются типами аргументов, т. е. Foo( int i, bool b ), которые будут принимать только аргументы типа int и bool в этом порядке. Именованные аргументы позволяют вам передать b первым и I вторым.
стоит отметить, в отличие от необязательных параметров, вы можете пропустить некоторые аргументы и проходят только те параметры, которые вас интересуют.
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);
}
@Krumelur сказал ,что " именованные параметры являются стандартными в ObjectiveC, например."
это не совсем правильно. Objective-C использует нотацию infix, чтобы это сообщение вызывало:
[foo setRed:255 Green:255 Blue:0];
это setRed:зеленый:синий: сообщение (включая эти двоеточия!) с аргументами (255,255,0), перемежающимися в имени сообщения.
хотя, конечно, на первый взгляд синтаксис Objective-C дает вид, что Objective-C использует имя параметры. Но это на самом деле не так, и непонимание разницы может быть препятствием для изучения Objective-C.
(Я бы ответил в комментариях, но я как-то потерял все свои очки репутации и я начинаю все заново. Поди ж ты. C'est la vie.)