1

それを行うための最良の方法は何かを学ぼうとしているだけです。私の問題を説明しようとします。長い質問のように思えるかもしれません。申し訳ありませんが、

クラス Element があり、Shape と Audio の 2 つのクラスがそこから派生し、さらに 2 つのクラス Text と Image が Shape から派生し、さらにクラス Video が Image から派生します。これらのクラスのそれぞれに型プロパティを実装する必要があります。これは、実際の型以外のこれらのクラスのいずれかに型を設定する意味がないため、読み取り専用の性質を持つ必要があります。たとえば、 Image の Type プロパティは常に値 Image を返し、それ以外は何も返しません。では、すべてのクラスに Type プロパティの実装を強制するこの階層を実装するにはどうすればよいでしょうか? これらの各クラスには、抽象としてマークできる基本要素クラス以外の独自の機能があります。これにより、Type プロパティを抽象としてマークできます。これにより、派生クラスで実装する必要がありますが、1 つのレベルでのみ強制的に実装されます。ビデオにも実装するように強制するにはどうすればよいですか? これに関する最善のアプローチを提案してください。

前もって感謝します。

4

2 に答える 2

1

Type プロパティを定義するインターフェイスを作成し、強制的に Type を実装する必要があるすべてのクラスをこのインターフェイスから継承させます。

于 2012-08-16T12:44:19.703 に答える
1

あなたが述べたように、基本クラスはプロパティを抽象化して、すべての派生クラスで強制的に実装することができます。ただし、第 2 層のクラス (Text および Image) が具象である場合、派生クラス (Video) にメソッドを強制的に実装することはできません (具象クラスは定義により完全に実装する必要があるため)。

Text/Image クラスでプロパティを Virtual として簡単にマークして、派生クラスでオーバーライドできるようにすることができますが、強制することはできません。

おそらく、ジェネリックとジェネリック基本クラスまたはインターフェイスを使用して何かを行うことができますが、それは設計に関するより多くの知識に依存します。

オブジェクト階層をどのように設計したかを再検討することをお勧めします (可能であれば) - おそらく、ビデオは画像から派生すべきではありません。それは本当に「ある」関係ですか?そうでない場合は、オブジェクト階層を変更するか、基本クラスではなくインターフェイスを使用して、目的の結果を達成することができます。

于 2012-08-16T12:44:19.720 に答える