メソッドのデフォルトパラメータはカプセル化に違反していますか?
C#でデフォルトパラメータを提供しない理由は何でしたか?
これをマイクロソフトからの「公式」の回答と見なします。ただし、既定の (および名前付きの) パラメーターは、C# 4.0 で確実に使用できるようになります。
いいえ、カプセル化にはまったく影響しません。多くの場合、それは単に必要ではありません。多くの場合、引数の少ないオーバーロードを作成すると、より柔軟でクリーンなソリューションになります。そのため、C# の設計者は、既定のパラメーターの複雑さを言語に追加する理由がわかりませんでした。
「同じことを行う別の方法」を追加することは、常にトレードオフです。場合によっては便利かもしれません。しかし、構文を合法化すればするほど、言語の学習が複雑になり、将来の拡張を妨げてしまう可能性があります。(おそらく、彼らはいつか同じような構文を使用する言語の別の拡張機能を考え出すでしょう。その場合、以前に追加した機能と競合するため、それを追加することは不可能です)
あなたの最初の質問に - いいえ、複数のオーバーロードされたコンストラクターを提供するのとまったく同じです。2つ目はなんとも言えません。
これがC#で提供されていない理由の答えです http://blogs.msdn.com/csharpfaq/archive/2004/03/07/85556.aspx
C# 4.0 での既定のパラメーターの実装の欠点の 1 つは、パラメーター名への依存関係が作成されることです。これは VB に既に存在していたため、4.0 での実装を選択した理由の 1 つかもしれません。
もう 1 つの欠点は、デフォルト値がオブジェクトのキャスト方法に依存することです。ここでそれについて読むことができます: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/optional-parameters-conclusion-treat-like-unsafe/216.html .