C# 仅仅为了清楚起见,从类继承是可以接受的吗?

C# 仅仅为了清楚起见,从类继承是可以接受的吗?,c#,oop,C#,Oop,假设我有一个只存储键/值对的模板/泛型类: public class GenericDatabase<Key, T> { public Dictionary<Key, T> Data { get; set; } public GenericDatabase() { Data = new Dictionary<Key, T>(); } ... } 公共类泛型数据库 { 公共字典数据{get;set;} 公共通用数

假设我有一个只存储键/值对的模板/泛型类:

public class GenericDatabase<Key, T>
{
 public Dictionary<Key, T> Data { get; set; }               

 public GenericDatabase()
 {
   Data = new Dictionary<Key, T>();
 }
 ...
}
公共类泛型数据库
{
公共字典数据{get;set;}
公共通用数据库()
{
数据=新字典();
}
...
}
仅仅为了清楚起见,不引入任何新方法或成员变量就从中派生类是可以接受的吗?例如,假设我想要一个字符数据库:

public class CharacterDatabase : GenericDatabase<string, CharacterStat>
{
   // no new methods or member variables
}
公共类CharacterDatabase:GenericDatabase
{
//没有新方法或成员变量
}

IMO为了清晰起见引入继承级别会让其他开发人员感到困惑。我认为通用声明已经足够清楚了

GenericDatabase<string, CharacterStat>
通用数据库

这是另一种语言。。但请看一看


在OOP中,没有任何东西可以阻止您这样做。然而,我在许多地方看到,它们使用标记接口而不是基类来指示某些内容。标记接口通常没有公共成员,仅用于将类标记为某个对象的示例

您可以查看以下链接:


对我来说,这取决于使用的混凝土类型

如果我有

GenericDatabase<string, CharacterStat>
通用数据库
我会让它保持原样——这很清楚。 但是如果我有

GenericDatabase<string, ArrayList<Pair<CharacterStat,Integer> > >
通用数据库

然后我肯定会给它起一个名字,一个真正的解释;)

@Antonijn我认为这样的事情会超越语言边界。。在C世界里,这是不受欢迎的原因吗?TypeDef在C世界中是不常见的,通常是避免使用的。我没有使用Java,因此我真的不知道。但顾名思义,
Cloneable
意味着您应该能够调用
instance.Clone()
方法。因此,它实际上不应该是一个标记接口。您的建议是大多数开发人员(有理由)的想法。然而,它是一个没有任何方法的标记接口,这是非常令人遗憾的。引入一个实际上没有Clone()方法的可克隆接口是一个巨大的错误。(尽管,即使它确实有一个Clone()方法,它仍然会一团糟,因为无法区分深层克隆和浅层克隆。)我想更好地理解;为什么会让人困惑?@Extrakun,假设我要在代码中使用你的类,那么只需键入类名
CharacterDatabase
,我就看不出它是否继承自泛型类,因为你的代码中有泛型类,我想你会将它用于多种类型。将其保留为泛型类将让开发人员知道还有其他可能的类型可以与类
GenericDatabase
交互。
GenericDatabase<string, CharacterStat>
GenericDatabase<string, ArrayList<Pair<CharacterStat,Integer> > >