質問
メソッドのデフォルトパラメータはカプセル化に違反しますか?
C#でデフォルトパラメータを提供しない理由は何ですか?
解決
これを"公式"マイクロソフトからの回答。ただし、デフォルト(および名前付き)パラメーターは C#4.0で確実に使用可能になります。
他のヒント
いいえ、カプセル化には影響しません。単に必要ではないことが多いです。多くの場合、引数の少ないオーバーロードを作成する方がより柔軟でクリーンなソリューションであるため、C#の設計者は、言語にデフォルトパラメータの複雑さを追加する理由を理解していませんでした。
「同じことをする別の方法」を追加する常にトレードオフです。場合によっては便利かもしれません。しかし、構文を合法化すればするほど、言語の学習はより複雑になり、将来の拡張を防ぐために、あなたは自分自身を壁に閉じ込めることになります。 (おそらく、彼らはいつか、同様の構文を使用する言語の別の拡張を思い付くでしょう。それから、それは以前に追加した機能と競合するため、追加することはできません)
前述のとおり、デフォルトのパラメーターは優先順位付けされた機能ではありませんでしたが、C#4.0で追加される可能性があります。ただし、それを以前に含めない優れた理由があると思います(4.0では、理解しているように、ほとんどの場合ダックタイピングスタイルのプログラミングで、デフォルトのパラメーターはタイプの互換性を高めます)。
過剰なパラメータリスト(4〜5個以上の個別のパラメータ)はコードの匂いだと思います。デフォルトのパラメーターはそれ自体では悪ではありませんが、デザインの質を低下させ、リファクタリングをより多くのオブジェクトに遅らせるリスクがあります。
最初の質問-いいえ、オーバーロードされた複数のコンストラクターを提供するのとまったく同じです。 2番目については言えません。
これがC#で提供されない理由の答えです http://blogs.msdn.com/csharpfaq/archive/ 2004/03/07 / 85556.aspx
C#4.0のデフォルトのパラメーター実装の欠点の1つは、パラメーター名への依存関係が作成されることです。これはすでにVBに存在していたため、4.0での実装を選択した理由の1つである可能性があります。
別の欠点は、デフォルト値がオブジェクトのキャスト方法に依存することです。それについてはここで読むことができます: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/optional-parameters-conclusion-treat-like-unsafe/216.html 。