gpt4 book ai didi

c# - 我可以在需要泛型类型的地方传递非泛型类型吗?

转载 作者:行者123 更新时间:2023-11-30 14:42:58 25 4
gpt4 key购买 nike

我想定义一组收集和保存数据的类。我想根据调用者的喜好,按需或以责任链方式调用它们。

为了支持链接,我已经这样声明了我的接口(interface):

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;
}

这会起作用吗?

最佳答案

将接口(interface)拆分为通用部分和非通用部分是一种常见的模式,尤其是当您将非通用方法移动到非通用接口(interface)时:

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);
}

关于c# - 我可以在需要泛型类型的地方传递非泛型类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2534211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com