1

C#4.0 では、メソッドにデフォルトのパラメーターを許可することで、非常に凝った便利な機能が導入されました。しかし、C#3.0 はそうではありません。したがって、「デフォルト パラメーター」をシミュレートする場合は、そのメソッドを 2 つ作成する必要があります。1 つはそれらの引数を持ち、もう 1 つはそれらの引数を持たないものです。これを行うには2つの方法があります。

バージョン A - 他のメソッドを呼び出す

public string CutBetween(string str, string left, string right, bool inclusive)
{
    return str.CutAfter(left, inclusive).CutBefore(right, inclusive);
}

public string CutBetween(string str, string left, string right)
{
    return CutBetween(str, left, right, false);
}

バージョン B - メソッド本体をコピーする

public string CutBetween(string str, string left, string right, bool inclusive)
{
    return str.CutAfter(left, inclusive).CutBefore(right, inclusive);
}

public string CutBetween(string str, string left, string right)
{
    return str.CutAfter(left, false).CutBefore(right, false);
}

これらの間に実際の違いはありますか?これは、最適化やリソースの使用法などに関する質問ではありません (一貫性を維持するという私の一般的な目標の一部ですが)、どちらかの方法を選択することに大きな影響があるとは思いませんが、これらのことについては、誤って推測するよりも、質問する方が賢明です。

4

3 に答える 3

4

唯一の本当の違いは、メンテナンスの違いです。2番目のバージョンは基本的にコードの複製の形式であり、これらの実装を変更する必要がある場合は、実行する作業が増えます(おそらく、実行するテストも増えます)。

それ以外の点では、基本的に他のすべての点で同じです。最初のケースでは、呼び出しスタックに1つの追加メソッドがあり、パフォーマンスやリソース使用量に目立った影響はありません(あなたが言ったように、最適化ではありません)問題)。

同じメソッドのいくつかのオーバーロードが必要な場合、最初の例で行ったことを実行する傾向があります。いくつかのオーバーロードされたメソッドはすべて同じ「一般的な」メソッドを呼び出します。

于 2010-05-28T17:23:30.577 に答える
1

1つの違いは、最初のバージョンでCutAfterまたはCutBeforeシグネチャが何らかの理由で変更された場合、1行だけを更新する必要があるのに対し、2番目のバージョンではメソッドと同じ数の行を更新する必要があることです。

于 2010-05-28T17:23:44.253 に答える
1

動作に違いはありませんが、バージョンBは明らかにデフォルトを適用しているだけではありません。コードを注意深く読んで、微妙な違いがないことを確認する必要があります。実際のロジックを含む1つの「マスター」メソッドを介してデフォルト値を調整する方がよいと思います。これにより、後でロジックを変更するのも簡単になります。1か所で変更するだけで済みます。

于 2010-05-28T17:25:20.287 に答える