3

次のようなことができるようになりたいです。

//non-generic
var MyTable = new Table();
string name = MyTable.Name;
IEnumerable<String> rows = MyTable.Rows;

//generic
var MyTableGeneric = new Table<MyType>();
string name = MyTableGeneric.Name;
IEnumerable<MyType> rows = MyTableGeneric .Rows;

このようなものは多すぎるでしょうか:

http://img81.imageshack.us/img81/427/diagramcm3.jpg

またはこれはより良いでしょうか:

http://img301.imageshack.us/img301/4136/presentation1nh9.jpg

私が何をしようとしているのか理解するのが難しい場合は申し訳ありませんが、基本的には、一般的な行コレクションを除いて、2 つのオブジェクトが共通のプロパティを共有します。これを最もクリーンな方法で行いたいと思います。

パワーポイントで作った下手な図で申し訳ありません:)

4

3 に答える 3

8

2番目のデザインの方が良いと思います。アイテムが少なくなり、継承パスがより簡単になります。

最初の設計には不必要なインターフェイスがあります。これは、インターフェイスを実装するが、基本クラスから継承しない何かを実装しない限り、実際には必要ありません。

于 2009-01-08T04:21:41.627 に答える
2

Tableaと aの違いは何Table<string>ですか? Table<string>つまり、非汎用フォームとしてそのまま使用することはできませんか?

2 番目のオプションを選択する場合は、プロパティの 1 つの名前を変更することをお勧めしますRows表示にするなどして、異なるタイプの 2 つのプロパティを使用することはできるかもしれませんが、快適にはなりません。

あなたのTableタイプは実際にどのくらい行動しますか?それが本当に単なるコンテナーである場合は、インターフェースは必要ないかもしれませんが、背後に重要なロジックがある場合は、それを使用するクラスをテストするときにテーブルをモックできるように、インターフェースが必要になる場合があります。

于 2009-01-08T06:23:18.513 に答える
1

基本クラスに文字列を含めずに行でジェネリックを使用し、非ジェネリックにテーブル クラスを継承させます。抽象クラスを使用しないことを検討してください。

Table<T> -> Table:Table<string>
于 2009-01-08T06:36:01.450 に答える