【发布时间】:2020-04-20 11:05:13
【问题描述】:
我正在尝试使用 c# 泛型创建一个通用接口,作为构建我所有列表服务的基础。但是我的定义有问题。
基类
abstract class ListingParams { }
abstract class ListingDTO<T> where T : ListingItemDTO
{
public List<T> Items{ get; set; }
}
abstract class ListingItemDTO { }
一个具体的例子
class HListingParams : ListingParams { }
class HListing : ListingDTO<HItem> { }
class HItem : ListingItemDTO { }
界面
interface IListingToolsService<in TFilter, out U, V>
where TFilter : ListingParams
where U : ListingDTO<V> where V : ListingItemDTO
{
int Count(TFilter parameters);
U Get(TFilter parameters);
}
问题就从这里开始,由于Get方法返回的是泛型类型,我不得不在接口中添加第三个泛型参数。
如果我想创建该接口的具体实现,我必须创建如下内容:
class HListingToolsService : IListingToolsService<ListingParams, HListing, HItem>
{
public int Count(ListingParams parameters) => throw new NotImplementedException();
public HListing Get(ListingParams parameters) => throw new NotImplementedException();
}
但是根据定义HListing 不是通用的,因为它是使用HItem 定义的。
有没有什么方法可以只用两个参数创建该接口,以免重复已经定义的类型?
【问题讨论】:
-
如果我错了,请纠正我,但如果接口已经在抽象类中处理,你不能省略 V 部分。