3

メソッド/プロパティ定義がサードパーティ(またはネイティブ)クラスで定義されたメソッド/プロパティの一部とすでに一致するインターフェイス(たとえば、MyClass Implementations MyInterface)を定義することは可能ですか?

たとえば、DataRowクラスには、「行のような」ものにする多くのプロパティ/メソッドがあります。ネイティブのDataRowクラスにすでに存在する特定のメソッドとプロパティを定義するインターフェイス(つまり、IRowLike)を実装する場合はどうなりますか(直接触れたり拡張したりすることはできません)。私は単に、実行時にクラスが実際に何らかのインターフェイスに準拠していることに同意することを望んでいます。

インターフェイスは、貧乏人向けの「ダックタイピング」を提供します。すべてが特定のインターフェイスに従うクラスのセットを取得したら、そのインターフェイスに対して拡張メソッドを定義でき、インターフェイスをサポートするすべてのクラスがすぐに新しい動作を取得します。サードパーティのクラスに対してインターフェイスをさかのぼって適用するのは奇妙に思えるかもしれませんが、それによって、より少ないコードでより多くのことができるようになります。

4

1 に答える 1

2

これは.Netでは不可能です。タイプは、コンパイル時にメタデータに実装するインターフェイスを定義し、その定義は実行時に変更できません。特定のインターフェースを実装するが、既存のタイプを変更しないタイプを実行時に生成することは可能です。

ただし、いくつかの選択肢があります。VB.Netでは、型に遅延バインディングを使用し、その方法で(またはC#で)インターフェイスメソッドにアクセスすることを選択できますdynamic。もちろん、欠点はコードが静的に検証できないことです。

于 2012-07-06T19:18:05.443 に答える