1. ホーム
  2. c#

[解決済み] C# 4.0では、オーバーロードとオプションのパラメータを使用してメソッドを宣言する必要がありますか?

2023-02-07 15:39:29

質問

私が見ていたのは Anders の C# 4.0 と C# 5.0 のスニークプレビューについての講演を見ました。 を見ていて、C# でオプションのパラメータが利用できるようになったら、すべてのパラメータを指定する必要のないメソッドを宣言する推奨方法はどうなるんだろう、と考えさせられました。

例えば FileStream クラスには約 15 種類のコンストラクタがあり、それらは論理的な「ファミリー」に分けることができます。 IntPtr からのもの、そして SafeFileHandle .

FileStream(string,FileMode);
FileStream(string,FileMode,FileAccess);
FileStream(string,FileMode,FileAccess,FileShare);
FileStream(string,FileMode,FileAccess,FileShare,int);
FileStream(string,FileMode,FileAccess,FileShare,int,bool);

このタイプのパターンは、代わりに3つのコンストラクタを持ち、デフォルトにできるものにはオプションのパラメータを使用することで簡略化できるように思えますが、これはコンストラクタの異なるファミリーをより明確にするものです[注: この変更がBCLで行われないことは知っています。]

あなたはどう思いますか?C# 4.0 からは、密接に関連するコンストラクターとメソッドのグループをオプションのパラメーターを持つ単一のメソッドにすることがより理にかなっているのか、それとも従来の多数のオーバーロードのメカニズムに固執する正当な理由があるのでしょうか?

どのように解決するのですか?

次のように考えています。

  • オプションのパラメータをサポートしない言語から、あなたのコードを使用する必要がありますか?もしそうなら、オーバーロードを含めることを検討してください。
  • あなたのチームには、オプショナルパラメータに激しく反対するメンバーがいますか?(時には、ケースを議論するよりも、気に入らない決定と共存する方が簡単なことがあります)。
  • デフォルトがコードのビルド間で変更されないと確信していますか、または変更される可能性がある場合、呼び出し元はそれで大丈夫ですか?

デフォルトがどのように機能するか確認したことはありませんが、デフォルト値は const フィールドへの参照と同じです。通常、それは問題ありません。デフォルト値の変更はいずれにせよかなり重要です。