我希望能够做到以下几点:
//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 :(得分:8)
我会说第二种设计更好。更少的项目和更容易的继承路径。
第一个设计有不必要的接口,除非你实现了一些实现接口但不从基类继承的东西,否则你真的不需要它。
答案 1 :(得分:2)
Table
和Table<string>
之间有什么区别?换句话说,您是否可以仅使用Table<string>
作为非通用表单?
如果您做选择第二个选项,我建议您重命名一个Rows
属性 - 您可以通过隐藏来获得两种不同类型的属性等等,但这不会令人愉快。
您的Table
类型实际上会有多少行为?如果它实际上只是一个容器,你可能不需要一个接口 - 但是如果它背后有重要的逻辑,你可能想要一个接口,这样你就可以在测试使用它的类时模拟出来。
答案 2 :(得分:1)
我会在行中使用泛型,而不在基类中包含字符串,并且非泛型继承Table类。考虑不使用抽象类。
Table<T> -> Table:Table<string>