2009-03-08 15 views
9

メソッドのデフォルトパラメータはカプセル化に違反していますか?デフォルトパラメータはOOPの悪い練習ですか?

C#でデフォルトパラメータを提供していない理由は何でしたか?

+0

私はあなたの質問を「私のコードではどこからでも邪魔されない魔法のものが来ていますか?」と読んでいます。私は、C#がこのオプションのパラメータGARBAGEを許可するようなきめ細かい言語を受け入れることはできません。 – Sharky

答えて

10

thisはマイクロソフトからの "公式"回答です。ただし、デフォルトの(および名前付きの)パラメータは、C#4.0で最も確かに利用可能なのはです。

1

最初の質問には、いいえ、複数のオーバーロードコンストラクタを提供することとまったく同じです。第二は、私は言うことができませんでした。

3

いいえ、カプセル化には何も影響しません。それはしばしば必要ではない。多くの場合、引数の少ないオーバーロードを作成する方がより柔軟でクリーンなソリューションであるため、C#のデザイナーは、デフォルトパラメータの複雑さを言語に追加する理由は見当たりませんでした。

「同じことをする別の方法」を追加することは、常にトレードオフです。場合によっては便利かもしれません。しかし、あなたが合法化する構文が増えるほど、言語はより複雑になり、学びやすくなり、将来の拡大を防ぐことができます。 (おそらく、彼らはいつか同じような構文を使用する言語の別の拡張機能を思いついたでしょう。以前に追加した機能と矛盾するので、追加できないでしょう)

1

デフォルトパラメータは、C#4.0

それについていくつかの読み物を中に含まれます:

click

click

またthis postの著者が資料を公開するようです近い将来、「なぜ」MSはC#でデフォルトのパラメータを実装するかを選択します

1

一つの欠点を提供し、それはパラメータ名の依存を作成することですいない理由を答えです。これはすでにVBで存在していたため、4.0で実装する理由の1つになる可能性があります。

もう一つの欠点は、オブジェクトをキャストする方法によってデフォルト値が異なることです。あなたはそれについてここで読むことができます:http://saftsack.fs.uni-bayreuth.de/~dun3/archives/optional-parameters-conclusion-treat-like-unsafe/216.html

2

既述のように、デフォルトのパラメータは優先順位付けされた機能ではありませんが、C#4.0では追加される可能性があります。しかし、私はそれを以前には含まないといい理由があったと確信しています(私が理解しているように、4.0ではデフォルトのパラメータがタイプの互換性を向上させるduck typingのプログラミングスタイルをサポートしています)。

過剰なパラメータリスト(確かに4つ以上の異なるパラメータ)はcode smellです。デフォルトのパラメータはそれ自身では悪いことではありませんが、設計が貧弱なため、リファクタリングがより多くのオブジェクトに遅延します。

関連する問題