2011-06-28 12 views
8

汎用Func <>およびアクション<>以降のバージョンの.NETの代理人は非常に魅力的です。これらは.NET 2.0をターゲットとするコードで簡単に再現できることが多くの場所で実証されています。 hereなどです。ライブラリ内のC#Func <>デリゲート

ただし、.NET 2.0をターゲットとするライブラリの観点からは、上位バージョンの.NETに基づいて構築されたアプリケーションによって消費される可能性があります。ライブラリ内のこの「互換レイヤー」を実装することは、(プライベートインターフェイスとパブリックインターフェイスの両方で)競合のレシピに過ぎないのですか?あるいは、このアプリケーションを、使用するアプリケーションがビルドするターゲットフレームワークとは独立させる方法がありますか?

これは初心者ではない場合は、 のいずれかを使用する方が良いでしょうか?A)名前が異なるパラメータ化されたデリゲートの同じセットを定義しますか?または.. B)厳密に.NET 2.0の規約に従い、必要なときに新しいデリゲートタイプを定義しますか?

+5

.NET 2.0をターゲットとするライブラリを構築する場合は、可能であれば、既存のデリゲートをフレームワークで使用してみてください。それ以外の場合は、独自の名前をつけてください。いかなる場合でも名前を付けないでください。または、.NET 3.0以上のデリゲートをミラーリングするための汎用汎用デリゲートを作成してください。それは混乱につながるだけです。互換性のあるデリゲートが相互に変換可能であるため、互換性レイヤーは不要です。 –

答えて

6

Func<>Action<>は、です。です。彼らはあなたのコードをもっと読みやすくし、厄介な定型宣言宣言の衝撃的な量を避けます。 だからこそ、それをとしたいのです。

これで本当に魅力的なプログラミングスタイルを使いたいと思っています。これは従来の方法ではなくほぼ普遍的に使用される標準的なテクニックですが、従来のバージョンのフレームワークをターゲットにしているため。あなたは何をするべきか?

は、次の3つの選択肢があります。

  1. 追加
  2. 精神で独自のコードに機能を追加しますが、競合しない名前で機能する前に一般的に使用されたプログラミングスタイルを使用しますあなた自身の名前空間で "実際の"名前を持つ独自のコードに機能を追加することができます。

古いプログラミングスタイルを使用すると、私たちが偉業から感謝するすべての利点が失われますure。それは大きな犠牲です。しかし、あなたの共同開発者は、このプログラミングスタイルに慣れているかもしれません。

矛盾しない名前の機能を使用することは十分に分かりやすいようです。人々はコードを読んで機能から恩恵を受けることができるだろうが、誰も彼らがそうではないと思われることを混乱させるだろう。最終的にアップグレードする準備ができたら、名前にパッチを当てなければなりません。幸いなことに、Ctrl + R、Ctrl + Rというのは非常に簡単です。

標準機能と同じ名前の機能を使用すると、コードは古いバージョンをターゲットにできますが、新しい機能を使用しているように見えます。勝利/勝利のようです。しかし、これは混乱の原因となる可能性があり、型が他の無知なアセンブリにさらされていないことに注意しなければならず、ソースレベルのコンパイルの問題が発生する可能性があります。だから、慎重に何が起こっているのかを完全に明確にしなければなりません。しかし効果的に働くことができます。

あなたのニーズに応じて、あなたの状況に合ったアプローチを選択する必要があります。誰にとっても正しい答えはなく、トレードオフだけです。

+0

私には別の答えがないので、私はこの問題に対する巧妙な解決はないと仮定します。これらのトレードオフはすでに私の頭の後ろに座っていますが、それは正当な理由があります。 –