VB.NETでは、どちらを使用するのが良いですか:関数のオーバーロードまたはデフォルトのパラメーター?
3 に答える
パラメータがオプションの場合(つまり、オーバーロードが完全なプロシージャシグニチャが受け入れるパラメータのサブセットである場合)、デフォルトまたはオプションのパラメータの方が理にかなっています。
オーバーロードがパラメーターに異なるタイプを許可している場合、またはルーチンによって異なる方法で解釈される意味的に異なるパラメーターである場合、オーバーロードの方が理にかなっています。
コードは他の言語で使用されますか? もしそうなら、それはハミッシュの答えを念頭に置きながら、バランスをオーバーロードに向かってスイングさせます. 特に、C# はオプションのパラメーターをサポートしていません - まだ...
確かに、これは誰かがあなたのコードを C# から使用することを実際に妨げるものではありません。
多くのパラメータがあり、それらが論理的に何かを表している場合は、 でProcess
機能するのと同じ方法で、それらを一緒にカプセル化することを検討してProcessStartInfo
ください。これは、オブジェクト初期化子のおかげで、C# から特に優れています。
これが構築用である場合は、ビルダー パターンをこれの変形と見なすこともできます。たとえば、Protocol Buffers では、次のようなことができます。
Person jon = new Person.Builder { Name="Jon", Age=32,
Spouse="Holly", Kids=3 }.Build();
これは、一度に人を作成しながら非常に読みやすくなります (1 つの式で、人自体を変更する必要はありません。実際、メッセージ タイプは不変です。そうでないのはビルダーだけです)。
ご参考までに
他のアセンブリから呼び出される関数またはメソッドにパラメーターを追加する場合は、次のようにします。
extra パラメータを使用して追加の関数を作成することで、オーバーロードできます。
または、オプションのパラメーターを追加することもできますが、新しいオプションのパラメーターを使用する必要がない場合でも、この関数を呼び出すすべてのアセンブリを再コンパイルする必要があります。これは通常、人々が期待するものではありません (特に VB6 の動作に慣れている人)。基本的に、新しいオプションのパラメーターを関数に組み込み、完全な後方互換性を期待することはできません。また、私が理解しているように、デフォルト値を変更した場合、変更を機能させるにはすべての呼び出しアセンブリを再構築する必要があります。