C# Language
名前付き引数
サーチ…
名前付き引数は、コードをより明確にすることができます
この単純なクラスを考えてみましょう:
class SmsUtil
{
public bool SendMessage(string from, string to, string message, int retryCount, object attachment)
{
// Some code
}
}
C#3.0より前は:
var result = SmsUtil.SendMessage("Mehran", "Maryam", "Hello there!", 12, null);
名前付き引数を使用してこのメソッドをさらに明確に呼び出すことができます 。
var result = SmsUtil.SendMessage(
from: "Mehran",
to: "Maryam",
message "Hello there!",
retryCount: 12,
attachment: null);
名前付き引数とオプションのパラメータ
名前付き引数をオプションのパラメータと組み合わせることができます。
この方法を見てみましょう:
public sealed class SmsUtil
{
public static bool SendMessage(string from, string to, string message, int retryCount = 5, object attachment = null)
{
// Some code
}
}
retryCount
引数を設定せずにこのメソッドを呼び出す場合は、次のようにします。
var result = SmsUtil.SendMessage(
from : "Cihan",
to : "Yakar",
message : "Hello there!",
attachment : new object());
引数の順序は必要ありません
名前付き引数は、任意の順序で配置できます。
サンプルメソッド:
public static string Sample(string left, string right)
{
return string.Join("-",left,right);
}
呼び出しサンプル:
Console.WriteLine (Sample(left:"A",right:"B"));
Console.WriteLine (Sample(right:"A",left:"B"));
結果:
A-B
B-A
名前付き引数は、オプションのパラメータのバグを避ける
メソッドが変更されたときの潜在的なバグを避けるために、常にオプション引数に名前付き引数を使用してください。
class Employee
{
public string Name { get; private set; }
public string Title { get; set; }
public Employee(string name = "<No Name>", string title = "<No Title>")
{
this.Name = name;
this.Title = title;
}
}
var jack = new Employee("Jack", "Associate"); //bad practice in this line
上記のコードは、コンストラクタがいつかのように変更されるまで、コンパイルして正常に動作します:
//Evil Code: add optional parameters between existing optional parameters
public Employee(string name = "<No Name>", string department = "intern", string title = "<No Title>")
{
this.Name = name;
this.Department = department;
this.Title = title;
}
//the below code still compiles, but now "Associate" is an argument of "department"
var jack = new Employee("Jack", "Associate");
「チームの他の誰かが間違っている」ときのバグを避けるためのベストプラクティス:
var jack = new Employee(name: "Jack", title: "Associate");
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow