我希望能够做到以下几点:

//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制作的糟糕图表:)

有帮助吗?

解决方案

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

第一个设计有不必要的接口,除非你实现了一些实现接口但不从基类继承的东西,否则你真的不需要它。

其他提示

TableTable<string>之间的区别是什么?换句话说,你能不能只使用Rows作为非通用表格吗?

如果您选择第二个选项,我建议您重命名一个<=>属性 - 您可以通过隐藏等方式获得两种不同类型的属性,但这不会令人愉快。

您的<=>类型实际上有多少行为?如果它实际上只是一个容器,你可能不需要一个接口 - 但是如果它背后有重要的逻辑,你可能想要一个接口,这样你就可以在测试使用它的类时模拟出来。

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

Table<T> -> Table:Table<string>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top