C# 这个设计好吗?接口和抽象类

C# 这个设计好吗?接口和抽象类,c#,generics,interface,abstract-class,C#,Generics,Interface,Abstract Class,我希望能够做到以下几点: //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> r

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

//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;
//非泛型
var MyTable=新表();
string name=MyTable.name;
IEnumerable rows=MyTable.rows;
//一般的
var MyTableGeneric=新表();
字符串名称=MyTableGeneric.name;
IEnumerable rows=MyTableGeneric.rows;
像这样的事情会不会太多:

还是这样更好:

很抱歉,如果这很难理解我想说的是什么,基本上我有两个对象将共享comman属性,除了这些行集合是泛型的。我想用最干净的方式来做这件事


很抱歉,我用powerpoint制作了糟糕的图表:)

我认为第二种设计更好。项目更少,继承路径更简单


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

表和表之间的区别是什么?换句话说,你能不能不把
Table
作为你的非通用形式

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


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

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

Table<T> -> Table:Table<string>
表格->表格:表格

BTW:这是一个在线创建图表的好工具: