逆コンパイルはオプションですか?はいの場合は、PostSharpやMono Cecilなどを使用して、問題のクラスを書き直し、そこに必要なコードを追加できます。派生のような標準のOOアプローチを使用したくない理由は私が好奇心をそそります。それは間違いなくハッキングではありません。
「最もクリーンな」OOソリューションは、集計を使用して、オブジェクト内にEntityクラスをカプセル化することです。ここで、データで実行できることと、データを操作またはクエリする方法を完全に制御できます。クラスは適切な抽象化で必要なすべての操作をサポートするのに十分強力であるため、集約クラスが内部Entityクラスを公開する必要がなくなったときに「天国」に到達しました。
拡張したいクラスが封印されている場合は、これらのクラスの作成者が拡張を望まなかった理由をよく考える必要があります。
Eric Lippertは、封印されたキーワードの使用法について素晴らしい投稿をしています。
..。
今、私は開発者がただ物事を成し遂げたいだけの非常に実用的な人々であることを認識しています。どんなクラスでも拡張できるのは確かに便利です。典型的な開発者は「IS-A-SHMIZ-A、私はただConfusticatorをFroboznicatorクラスに叩きつけたい」と言います。その開発者はハッシュテーブルを作成して相互にマッピングすることができますが、アイテムを削除するタイミングなどを心配する必要があります。これはロケット科学ではありませんが、機能します。
明らかに、ここにはトレードオフがあります。トレードオフは、開発者が古いオブジェクトをプロパティバッグとして扱うことを許可することで少し時間を節約できるようにすることと、適切に設計されたOOPtacularの完全な機能を備えた、堅牢で安全な予測可能でテスト可能なフレームワークを開発することです。妥当な時間-そして私は後者に大きく傾くつもりです。あなたは何を知っているので?それらの同じ開発者は、私たちが彼らに与えるフレームワークが、中途半端で、もろく、安全でなく、完全にテストされていないために彼らを遅くすると、ひどく不平を言うでしょう!
..。
あなたの、アロイス・クラウス