2009-01-08 39 views
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

對不起,如果這很難理解我想要得到什麼,基本上我有兩個對象將共享comman屬性,除了行集合將是通用的。我想以最乾淨的方式做到這一點。

對不起,我的蹩腳圖,在powerpoint :)

+0

BTW:這是在網上創建圖表的絕佳工具:http://yuml.me/diagram/scruffy/class/samples – Marek 2010-04-12 07:44:09

回答

8

我想說第二個設計更好。較少的項目和更容易的繼承路徑。

第一個設計不必要的接口,你並不真正需要,除非你實現別的東西,它實現了接口,但不從基類繼承。

2

什麼betweeen一個TableTable<string>區別?換句話說,你不能僅僅使用Table<string>作爲你的非泛型形式嗎?

如果去的第二個選項,我建議重新命名Rows屬性之一 - 你可以通過隱藏等不同類型的兩個屬性閃避,但它不會是愉快。

您的Table類型實際上有多少行爲?如果它真的只是一個容器,你可能不需要一個接口 - 但是如果它背後有重要的邏輯,你可能需要一個接口,以便在測試使用它的類時可以嘲笑表格。

1

我會在行中使用泛型,而不涉及基類中的字符串,並且非泛型繼承Table類。考慮不使用抽象類。

Table<T> -> Table:Table<string>