6

C#4.0がリリースされる前は、共変性と反変性に非常に興奮していました。それは理論的な正しさのために私の愛情に甘んじました!

しかし、それが終わって、私は通常の、毎日の、退屈なコードを書くことに戻ったので、私は疑問に思い始めています:私はまだそれを使用したことがありますか?そして、私はそれを意識的に使用していないことに気づきました。それ以来、私が定義したインターフェースやデリゲートはどれもその恩恵を受けていません。

後で無意識のうちに共分散を使用していることに気付いたのは1つのケースだけですが、それは非常に微妙であり、気付かなかった可能性もあります。想像してみてくださいX。これは基本クラスでYあり、その子孫です。

if (enumerableOfYs.Contains(variableOfTypeX))

共分散または反変性を実際の非考案のユースケースで使用し、見事に「正しい」ことで1日を本当に節約した、興味深いまたはエキサイティングな例はありますか?

4

4 に答える 4

9

(コンパイラのテストケースや記事などを書くのではなく)実際の顧客向けの書き込みプログラムで遭遇した唯一の「現実世界」の分散の使用は、IEnumerable<TypeParameterDefinedInSource>を期待するメソッドに渡すことができるようになりました。 IEnumerable<TypeSymbol>C#でコード分析ツールを作成するとき。

これは、実際には「1日を節約する」種類の機能ではありません。これは、「期待どおりに機能する」機能です。

于 2010-08-29T05:37:24.090 に答える
3

この機能の設計者の1人であるEricLippertによる、共変性と反変性に関する優れた2部構成のビデオシリーズを視聴しました。ビデオには、この機能がどのように機能するかについて私が見つけることができる最も明確な説明が含まれています。ただし、例はデモンストレーション用に考案されています。

特に、2番目のビデオの最後で、ユーザーがこの機能をいつ使用するかについてのエリックの議論に感謝します。彼は、ほとんどの基幹業務アプリケーション開発者はおそらく共分散または反変性を使用する多くのインターフェースを作成しないだろうが、それはフレームワーク開発者(もちろんあなた自身のフレームワークを含む)の役割である可能性が高いと述べました。

一方で、型キャストフープを飛び越えずに、やっとinをIEnumerable<DerivedClass>期待するメソッドに入れることができます。IEnumerable<BaseClass>結局、私はおそらく私が今までできなかったことを忘れるでしょう。これは、共分散/反変性の最も説得力のある一般的な使用法になると思います。以前のバージョンの.NETでは機能しなかった場合にのみ機能する、非常に微妙なものです。

于 2010-08-28T14:20:01.077 に答える
1

共変性や反変性などの機能は、実際には「日を節約」するものではありません。むしろ、正しく使用すると、後のメンテナンスが容易になります。このように、C++のconstの正当性によく似ています。パワーを追加することはありませんが、正しく記述されたコードはそれを使用し、システムの操作をはるかに簡単にします。

注:VS 2010にアップグレードしたばかりなので、まだ使用していません。

于 2010-08-27T05:09:13.250 に答える
0

私はC#を約3年間使用しましたが、分散機能が「欠落している」ことを思い出すのは、おそらく1回か2回だけです。

それらがその言語になったことで、それらを利用する機会が増える可能性がありますが、せいぜい「マイナー」な機能だと思います。

(他の人の答えがここに表示されるのを見てみたいです。)

于 2010-08-27T05:35:26.157 に答える