Вызов метода C # с именем параметра и двоеточием - PullRequest
31 голосов
/ 10 марта 2011

Иногда я начинаю замечать, что когда я выполняю вызовы методов в C #, имена параметров для вызываемого мной метода будут отображаться в списке intellisense, дополненном двоеточием, и что тогда я смогуОтформатируйте вызов метода следующим образом:

MethodCall(parameter1:value1, parameter2:value2);

Это новая языковая функция?Это напоминает мне о том, как вы можете вызывать хранимые процедуры в SQL и указывать имена параметров следующим образом:

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

Является ли это похожей функцией?Если да, то с какой целью?Если нет, то что это такое и для чего оно будет использоваться.

Ответы [ 6 ]

36 голосов
/ 10 марта 2011

Это новая функция.Смотрите здесь: http://msdn.microsoft.com/en-us/library/dd264739.aspx Именованные параметры являются стандартными в ObjectiveC, например.Требуется некоторое время, чтобы привыкнуть к ним, но это хорошая вещь.Только взглянув, вы сможете понять, для чего предназначен параметр.

20 голосов
/ 10 марта 2011

Именованные параметры позволяют вам явно установить значение аргументов в произвольном порядке независимо от подписи.Сигнатуры методов определяются типами аргументов, т. Е. Foo (int i, bool b), которые будут принимать аргументы только типов int и bool в этом порядке.Именованные аргументы позволяют передавать b первым, а i вторым.

12 голосов
/ 20 марта 2014

Стоит отметить, что в отличие от необязательных параметров, вы можете пропускать определенные аргументы и передавать только те параметры, которые вас интересуют.

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);
}
5 голосов
/ 10 марта 2011

Скотт Гу представил эту новую функцию в своем блоге:

Необязательные параметры и именованные аргументы в C # 4

2 голосов
/ 10 марта 2011
0 голосов
/ 20 июля 2015

@ Крумельур сказал, что «Именованные параметры являются стандартными в ObjectiveC, например.»

Это не совсем правильно. Objective-C использует инфиксную нотацию, поэтому вызов этого сообщения:

[foo setRed:255 Green:255 Blue:0];

- это сообщение setRed: Green: Blue: (включая эти двоеточия!) С (255,255,0) аргументами, вкрапленными в имя сообщения.

Хотя, само собой разумеется, синтаксис Objective-C на первый взгляд создает впечатление, что Objective-C использует именованные параметры. Но это не совсем правильно, и неправильное понимание различий может стать препятствием для изучения Objective-C.

(Я бы ответил в комментарии, но я как-то потерял все свои очки репутации, и я начинаю заново. Drat. C'est la vie.)

...