我想定义一组收集和保存数据的类。我想按需要或者以负责任的方式称呼他们,就像来电者所喜欢的那样。
为了支持链接,我已经声明了我的界面:
interface IDataManager<T, K>
{
T GetData(K args);
void WriteData(Stream stream);
void WriteData(T data, Stream stream);
IDataCollectionPolicy Policy;
IDataManager<T, K> NextDataManager;
}
但每种具体类型的T和K都会有所不同。如果我这样给它:
IDataManager<T, K> NextDataManager;
我假设调用代码只能链接具有相同T和K的类型。有没有办法让它链接任何类型的IDataManager?
我遇到的一件事就是让IDataManager继承自非泛型IDataManager,如下所示:
interface IDataManager { }
interface IDataManager<T, K>: IDataManager
{
T GetData(K args);
void WriteData(Stream stream);
void WriteData(T data, Stream stream);
IDataCollectionPolicy Policy;
IDataManager NextDataManager;
}
这会起作用吗?
答案 0 :(得分:4)
将接口拆分为通用和非泛型部分是一种常见模式,尤其是在将非泛型方法移动到非泛型接口时:
interface IDataManager
{
void WriteData(Stream stream);
IDataCollectionPolicy Policy { get; set; }
IDataManager NextDataManager { get; set; }
}
interface IDataManager<T, K> : IDataManager
{
T GetData(K args);
void WriteData(T data, Stream stream);
}
答案 1 :(得分:2)
是的,您提出的解决方案是正确的。一般的做法是(如你所描述的)创建一个非泛型的基类/接口,然后是一个实现/继承它的泛型类/接口。