我有一系列分层嵌套的通用接口,例如,这样看起来像这样:
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
{
...
}
有没有办法减少此代码签名?
答案 0 :(得分:2)
应该非常小心地使用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) { }
但在更具体的情况下也使用泛型。