メソッドにオプションのパラメーターを配置するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/823967

  •  05-07-2019
  •  | 
  •  

質問

メソッドでオプションのパラメーターを宣言することは可能ですか?

たとえば、デルファイでは、次のようなことができます:

procedure Test(p1:integer;p2:integer;p3:integer = 2;p4:integer = 4)

その関数を呼び出すとき、4つのパラメーターまたは2つのパラメーターで呼び出すことができます:

Test(2,3); //p3 = 2,p4 = 4.
Test(2,3,4,5); //p3 = 4,p4 = 5;

C#ではどのように可能ですか?

役に立ちましたか?

解決

これはC#1〜3では不可能だと思います。しかし、良いニュースは、非常に要求の多い機能であるためです(確かに、見たくない人もいます)。 C#4に追加することにしました。

C#4の構文は次のとおりです。

public static void SayHello(string s = "Hello World!")
{
    Console.WriteLine(s);
}

使用法:

SayHello(); // Prints "Hello World!"
SayHello("Hello."); // Prints "Hello."
SayHello(s: "Hello."); // Prints "Hello."

(最後の例では名前付き引数を使用しますが、これは実際には必要ありませんが、オプションのパラメーターが複数ある場合に役立ちます。)

このブログ投稿

他のヒント

C#4.0 。オプションのパラメーターをサポートするか、標準のオーバーロードメカニズムを使用します。

void Test(int p1, int p2, int p3, int p4)
{ }

void Test(int p1, int p2)
{
    Test(p1, p2, 2, 4);
}

C#4.0でも可能ですが、リリースされるまで、メソッドのオーバーロードバージョンを作成することで回避できます。

public void MyMethod( int a, int b, int c )
{
    ...
}

public void MyMethod( int a, int b)
{
   MyMethod(a, b, 4);
}

変数の引数を使用できます

paramsキーワードを使用します。

void paramsExample(params int[] argsRest)
{

 if(argsRest.Length == 2) then...
 else if(argsRest.Length == 4) then...
 else error...

}
using System;
using System.Runtime.InteropServices;

   public static void SayHello([Optional][DefaultParameterValue("Hello Universe!")] string s)
   {
      Console.WriteLine(s);
   }

完了! :)

まだできません。 C#4.0の機能

回避策としてparamsを使用できますが、一部の言語がデフォルトのパラメーターを処理する方法ではなく、連続してしか使用できません。

このようなオーバーロードを使用します

Test(int p1, int p2)
Test(int p1, int p2, int p3)

このようなプライベートメソッドを呼び出せます

Test(int[] ps)

次にデータを処理します。

これを処理する別の方法は、オーバーロード/オプションのパラメーターを使用せず、代わりにメソッドに名前を付けることです-悪いトレードオフのように見えるかもしれませんが、コードはおそらく読みやすくなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top