分层嵌套泛型接口
本文关键字:泛型接口 嵌套 分层 | 更新日期: 2023-09-27 18:34:18
我有一串分层嵌套的泛型接口,例如如下所示:
ICar<TWheels, TBolts>
where TWheels : IWheels<TBolts>
where TBolts : IBolts
{
IEnumerable<TWheels> Wheels { get; set; }
}
IWheels<TBolts>
where TBolts : IBolts
{
IEnumerable<TBolts> Wheels { get; set; }
}
IBolts
{
}
这是处理这些通用接口的明智方法吗?
它使定义方法如下所示:
public TCar GetCar<TWheels, TBolts>(int id)
where TCar : ICar<TWheels, TBolts>
where TWheels : IWheels<TBolts>
where TBolts : IBolts
{
...
}
有没有办法减少此代码签名?
C# 中的泛型应非常谨慎地使用,以避免您遇到的问题。我建议修改接口层次结构并丢弃泛型:
interface ICar
{
IEnumerable<IWheel> Wheels { get; set; }
}
interface IWheel
{
IEnumerable<IBolt> Bolts { get; set; }
}
interface IBolt
{
}
然后,最好看看这些接口参与的用例。
可能是,在极少数情况下,您需要IR16Wheel
而不是IWheel
,类型转换就足够了。
也许,将非泛型接口与泛型接口配对就足够了:
interface IWheel<TBolt> : IWheel
where TBolt : IBolt
{
IEnumerable<TBolt> Bolts { get; set; }
}
并将非泛型与如下方法一起使用:
public ICar GetCar(int id) { }
但也在更具体的情况下使用泛型。