C# 4.0 でのメソッドのオーバーロードとオプションのパラメータ [重複] 質問する

C# 4.0 でのメソッドのオーバーロードとオプションのパラメータ [重複] 質問する

どちらが優れているでしょうか? 一見すると、オプション パラメータの方が優れているように見えます (コードが少なくなり、XML ドキュメントが少なくなるなど)。しかし、ほとんどの MSDN ライブラリ クラスがオプション パラメータではなくオーバーロードを使用するのはなぜでしょうか?

オプションパラメータ(またはオーバーロード)を使用する場合に、注意すべき特別なことはありますか?

ベストアンサー1

C# 4.0 の「オプション パラメーター」と「名前付きパラメーター」を組み合わせた優れた使用例の 1 つは、パラメーターの数に基づいてメソッドをオーバーロードするメソッド オーバーロードの優れた代替手段を提供することです。

たとえば、メソッドを次のように呼び出したり使用したりしたいとします。fooメソッドのオーバーロードを使用すると、次のようなソリューションを実装できます。foo()foo(1)foo(1,2)foo(1,2, "hello")

///Base foo method
public void DoFoo(int a, long b, string c)
{
   //Do something
}  

/// Foo with 2 params only
public void DoFoo(int a, long b)
{
    /// ....
    DoFoo(a, b, "Hello");
}

public void DoFoo(int a)
{
    ///....
    DoFoo(a, 23, "Hello");
}

.....

C# 4.0 のオプションパラメータを使用すると、次のようなユースケースを実装できます。

public void DoFoo(int a = 10, long b = 23, string c = "Hello")

次に、メソッドを次のように使用します - 名前付きパラメータの使用に注意してください -

DoFoo(c:"Hello There, John Doe")

この呼び出しは、パラメータa値として 10、パラメータbとして 23 を受け取ります。この呼び出しの別のバリエーションとして、パラメータ値をメソッド シグネチャに現れる順序で設定する必要がないことに注意してください。名前付きパラメータによって値が明示的に設定されます。

DoFoo(c:"hello again", a:100) 

名前付きパラメータを使用するもう 1 つの利点は、オプションのパラメータ メソッドの可読性が大幅に向上し、コードのメンテナンスが容易になることです。

1 つのメソッドによって、メソッド オーバーロードで 3 つ以上のメソッドを定義する必要がなくなることに注意してください。これは、オプション パラメーターを名前付きパラメーターと組み合わせて使用​​するのに適した使用例であることがわかりました。

おすすめ記事