4

IStructuredReaderファイルからいくつかの構造化データを読み取り、それをフォームに表示するというインターフェイスがあります。Sync()これには、実装時にユーザー指定のデータ パターンのデータをスキャンする というメンバーがあります。

の一部の実装にIStructuredReaderは、同期機能がありません。これらの実装はメソッドをスローNotImplementedExceptionSync()ます。このメソッドが実装されていることを確認できるようにしたいので、そうでない場合はフォームのボタンを暗くすることができます。

これを行う方法はいくつか考えられますが、どれもぎこちなく複雑に思えます。

  1. Syncメソッドを独自のインターフェイスに分離し、機能をサポートする実装のために継承し、リーダー オブジェクトをそれにキャストして機能を識別しようとします。

  2. を書きNotImplementedAttribute、それでメンバーを装飾し、リフレクションを使用して属性の存在を確認します。

  3. HasSyncCapabilityインターフェイスにブール型のプロパティを追加します。

これが行われる標準的な方法はありますか?

4

2 に答える 2

6

これは、実際には 2 つのインターフェイスが必要なように思えます。あなたのSync()メソッドは明らかに基本インターフェースに機能を追加しています。これは、IStructuredReader. これをサポートするタイプに 2 番目のインターフェイスを追加することをお勧めします。これにより、ビュー レイヤーで簡単に確認できます。

于 2013-01-16T18:51:40.557 に答える
2

Syncronizable標準的な方法は、インターフェイスが実装されるメソッドを公開することです。そのため、私が見る最もクリーンな解決策は、おそらくそのメソッドだけで呼び出される別のインターフェイスを作成することです。オブジェクトがそのインターフェイスを実装している場合、メソッドがそこにあることがわかり、これはまったく不器用ではありません。リフレクションや余分な属性を使用することは、実際には解決策ほどきれいではありませんが、それがあなたの人生を楽にするなら、それらを使うべきではないという意味ではありません;)

于 2013-01-16T18:52:15.490 に答える