web-dev-qa-db-ja.com

パラメーター名とコロンを使用したC#メソッドの呼び出し

C#でメソッド呼び出しを行っているときに、呼び出しているメソッドのパラメーターの名前がコロンが追加されたインテリセンスリストに表示され、メソッドをフォーマットできることに気づき始めました。このように呼び出します:

MethodCall(parameter1:value1, parameter2:value2);

これは新しい言語機能ですか? SQLでストアドプロシージャを呼び出して、次のようにパラメーター名を指定する方法を思い出します。

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

これは同様の機能ですか?もしそうなら、何のために?そうでない場合、それは何であり、何に使用されますか?.

35
Zann Anderson

これは新機能です。ここを参照してください: http://msdn.Microsoft.com/en-us/library/dd264739.aspx 名前付きパラメーターは、たとえばObjectiveCの標準です。慣れるまでには少し時間がかかりますが、良いことです。見ているだけで、パラメータの意味がわかります。

40
Krumelur

名前付きパラメータを使用すると、シグネチャとは関係なく、カスタムの順序で引数の値を明示的に設定できます。メソッドシグネチャは、引数の型、つまりFoo(int i、bool b)によって定義されます。これは、int型とbool型の引数のみをこの順序で受け入れます。名前付き引数を使用すると、bを最初に、iを2番目に渡すことができます。

21
Brandon Moretz

言及する価値があります。オプションのパラメーターとは異なり、特定の引数をスキップして、関心のあるパラメーターのみを渡すことができます。

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);
}
12
vent

Scott Guはこの新機能を彼のブログで紹介しました:

C#4のオプションのパラメーターと名前付き引数

5
CD..

C#4に付属しているのは 名前付きおよびオプションのパラメーター です。

2
ChrisF

@Krumelurは、「名前付きパラメーターは、たとえば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。)

0