Вызов метода 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);
}

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

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



@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.)