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