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 制作的蹩脚图表 :)

4

3 回答 3

8

我会说第二种设计更好。更少的项目和更容易的继承路径。

第一个设计具有不必要的接口,除非您正在实现其他实现接口但不从基类继承的东西,否则您实际上并不需要这些接口。

于 2009-01-08T04:21:41.627 回答
2

Tablea和 a 有什么区别Table<string>?换句话说,你能不能只使用Table<string>你的非泛型形式?

如果您确实选择了第二种选择,我建议您重命名您的一个Rows属性 - 您可以通过隐藏等方式拥有两个不同类型的属性,但这不会令人愉快。

Table你的类型实际上会有多少行为?如果它真的只是一个容器,你可能不需要接口——但如果它背后有重要的逻辑,你可能想要一个接口,以便在测试使用它的类时模拟表。

于 2009-01-08T06:23:18.513 回答
1

我会在行中使用泛型,而不涉及基类中的字符串,并且让非泛型继承 Table 类。考虑不使用抽象类。

Table<T> -> Table:Table<string>
于 2009-01-08T06:36:01.450 回答