0

私は自分のコマンドライン引数パーサーに取り組んでおり、メソッドのオーバーロードに関する何十もの記事を読んだ後でも、それが正しいかどうかはまだわかりません.

この方法でメソッドをオーバーロードするメリットはありますか? 分岐することで単一のメソッド (デフォルト値パラメーターを使用) に全体を記述できることはわかっていますが、現在オーバーロードを実験しているため、このパスを続行するかどうかを知りたいと考えています。

    public static class MyParsers
    {
        private static List<string> args;

        static MyParsers()
        {
            args = Environment.GetCommandLineArgs().ToList();
        }

        public static List<string> ParseOptions()
        {
            return ParseOptions(false);
        }

        public static List<string> ParseOptions(bool toLowercase)
        {
            // DEBUG: Change command line arguments here.
            var arguments = args;
            return !toLowercase
                       ? arguments
                       : arguments.MyExtToLower();
        }

        public static bool OptionExists(string option)
        {
            return OptionExists(option, false);
        }

        public static bool OptionExists(string option, bool toLowercase)
        {
            var list = ParseOptions(toLowercase);
            for (var i = 1; i < list.Count; i++)
            {
                if (list[i].StartsWith(option)) return true;
            }
            return false;
        }

}
4

5 に答える 5

1

オプションのパラメーターの「問題」は、アセンブリ A の将来のバージョン X でデフォルト値が変更された場合、A を参照するすべてのクライアント アセンブリ C を再コンパイルして、変更を「確認」する必要があることです。 A のバージョンでは、新しいメソッドが古いデフォルト値で呼び出されます。

これが潜在的な問題でない場合は、オプションのパラメーターを使用する方が便利です。複数のオーバーロードを使用してオプションのパラメーターをエミュレートする同等のバージョンには、この問題はありません。その場合、デフォルト値が C ではなくアセンブリ A に焼き付けられるためです。

于 2012-08-13T11:37:43.420 に答える
1

オーバーロードのスタイルは問題ないと思います。

多数のオーバーロードされたメソッドを持つ 1 つのクラスではなく、さまざまな解析引数 (ToUpperCase など) が多数あると思われる場合は、オブジェクト継承の使用を検討し、LowerCaseParser、CamelCaseParser などを使用することを検討してください。

于 2012-08-13T11:37:45.963 に答える
1

はい、大丈夫です。

既にご存知のように、オーバーロードがデフォルト値で別のメソッドを呼び出すだけの場合は、オプションのパラメーターをデフォルト値で使用することもできます (これにより、コードの行数が削減されます)。

于 2012-08-13T11:33:37.300 に答える
1

うん、これがオーバーロードの仕組みです。

しかし、サイドノード:

  • オプションのパラメーターをサポートしていない言語からコードを使用する必要がありますか? その場合は、オーバーロードを含めることを検討してください。
  • オプションのパラメーターに激しく反対するメンバーがチームにいますか? (場合によっては、主張するよりも、気に入らない決定を下す方が簡単です。)
  • コードのビルド間で既定値が変更されないという確信はありますか? または変更される可能性がある場合、呼び出し元はそれで問題ありませんか?

出典: C# 4.0 では、オーバーロードまたはオプションのパラメーターを使用してメソッドを宣言する必要がありますか?

于 2012-08-13T11:35:55.910 に答える
1

はい、それがオーバーロードを使用する正しい方法です。

デフォルトのパラメーターについて注意すべき点が 1 つあります。

A と B の 2 つのアセンブリがある場合、A は B の関数を呼び出します。

B のデフォルトを変更した場合:

パラメータのデフォルト値を使用して、この変更を有効にするためにアセンブリ A と B の両方を再コンパイルする必要があります

オーバーロードを使用すると、B を再コンパイルするだけで済みます。

これは、デフォルト パラメーターの場合、コンパイル時にコンパイラがデフォルト値を挿入するためです。

于 2012-08-13T11:39:04.340 に答える