10

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

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

4

7 に答える 7

11

これをマイクロソフトからの「公式」の回答と見なします。ただし、既定の (および名前付きの) パラメーター、C# 4.0 で確実に使用できるようになります。

于 2009-03-08T18:38:39.423 に答える
3

いいえ、カプセル化にはまったく影響しません。多くの場合、それは単に必要ではありません。多くの場合、引数の少ないオーバーロードを作成すると、より柔軟でクリーンなソリューションになります。そのため、C# の設計者は、既定のパラメーターの複雑さを言語に追加する理由がわかりませんでした。

「同じことを行う別の方法」を追加することは、常にトレードオフです。場合によっては便利かもしれません。しかし、構文を合法化すればするほど、言語の学習が複雑になり、将来の拡張を妨げてしまう可能性があります。(おそらく、彼らはいつか同じような構文を使用する言語の別の拡張機能を考え出すでしょう。その場合、以前に追加した機能と競合するため、それを追加することは不可能です)

于 2009-03-08T18:36:52.640 に答える
1

あなたの最初の質問に - いいえ、複数のオーバーロードされたコンストラクターを提供するのとまったく同じです。2つ目はなんとも言えません。

于 2009-03-08T18:36:29.677 に答える
1

C# 4.0 には既定のパラメーターが含まれます。

それに関するいくつかの読み物:

クリック

クリック

また、この投稿の著者は、MS が C# でデフォルト パラメータを実装することを選択する「理由」について、近い将来に記事を公開する予定です。

于 2009-03-08T18:39:27.097 に答える
1

これがC#で提供されていない理由の答えです http://blogs.msdn.com/csharpfaq/archive/2004/03/07/85556.aspx

于 2009-03-08T18:41:26.437 に答える
1

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 .

于 2009-03-08T18:59:18.327 に答える