假设我有一个只存储键/值对的模板/泛型类:
public class GenericDatabase<Key, T>
{
public Dictionary<Key, T> Data { get; set; }
public GenericDatabase()
{
Data = new Dictionary<Key, T>();
}
...
}
为了清楚起见,在不引入任何新方法或成员变量的情况下从中派生类是否可以接受?例如,假设我想要一个角色数据库:
public class CharacterDatabase : GenericDatabase<string, CharacterStat>
{
// no new methods or member variables
}
答案 0 :(得分:3)
IMO 为了清晰起见,引入一定程度的继承会让其他开发人员感到困惑。我认为通用声明足够清楚。
GenericDatabase<string, CharacterStat>
答案 1 :(得分:1)
它是一种不同的语言..但请看一下how c++ defines its std::string
class。
typedef basic_string<char> string;
只是想指出这种做法不仅常见,而是由标准图书馆编写者自己使用。
如果您要多次使用CharacterDatabase
,我会支持这样的步骤。另外,我不确定C#是否提供了除继承之外的任何其他更简单的机制(如C ++的typedef
),但这是首选。
The using directive can be used like a typedef,但它只影响声明它的文件。
using CharacterDatabase = GenericDatabase<string, CharacterStat>
答案 2 :(得分:1)
在OOP中没有什么能阻止你这样做。但是,我在许多地方看到他们使用 Marker Interfaces 而不是基类来表示某些东西。标记接口通常没有公共成员,只能用于将类标记为的一个示例。
您可以查看以下链接:
答案 3 :(得分:1)
对我来说,这取决于所使用的具体类型。
如果我有
GenericDatabase<string, CharacterStat>
我会保持原样 - 很清楚。 但如果我有
GenericDatabase<string, ArrayList<Pair<CharacterStat,Integer> > >
然后我肯定会给它一个名字,一个真正解释的名字;)。