我有一个类,它有一个属性是另一个接口(interface), 像下面的例子:
public interface ICar
{
int ID { get; set; }
ICarInfo Info { get; set; }
}
public interface ICarInfo
{
Motor Motor { get; set; }
Wheels Wheels { get; set; }
String Category{ get; set; }
}
以及 ICarInfo 的两个实现:
public Class SUVInfo : ICarInfo
{
Motor Motor { get; set; } = new Motor("SUV");
Wheels Wheels { get; set; } = new Wheels("SUV");
String Category{ get; set; } = "SUV";
}
public Class CompactInfo : ICarInfo
{
Motor Motor { get; set; } = new Motor("Compact");
Wheels Wheels { get; set; } = new Wheels("Compact");
String Category{ get; set; } = "Compact";
}
我无法实现一个 ICar 类,使用 ICarInfo 的实现,如示例:
public Class SUV : ICar
{
int ID { get; set; }
SUVInfo Info { get; set; }
}
SUVInfo是一个ICarInfo,但是出现如下错误:
'SUV' does not implement interface member 'ICar.Info'. 'SUV.Info' cannot implement 'ICar.Info' because it does not have the matching return type of 'ICarInfo'.
最佳答案
您可以只使用一个类并将这些值传递给它的构造函数,而不是为 ICarInfo
设置仅在属性值上不同的不同类:
public class CarInfo : ICarInfo {
Motor Motor { get; set; }
Wheels Wheels { get; set; }
String Category{ get; set; }
public CarInfo(Motor motor, Wheels wheels, string category)
{
this.Motor = motor;
this.Wheels = wheels;
this.Category = category;
}
}
这样你根本不需要搞乱不同的类型:
public Class SUV : ICar
{
int ID { get; set; }
ICarInfo Info { get; set; } = new CarInfo(new Motor("SUV"), new Wheels("SUV"), "SUV");
}
如果你真的想要不同的类,你也可以使用泛型:
public interface ICar<T> where T: ICarInfo
{
int ID { get; set; }
T Info { get; set; }
}
public interface ICarInfo
{
Motor Motor { get; set; }
Wheels Wheels { get; set; }
String Category{ get; set; }
}
public Class SUVInfo : ICarInfo
{
Motor Motor { get; set; } = new Motor("SUV");
Wheels Wheels { get; set; } = new Wheels("SUV");
String Category{ get; set; } = "SUV";
}
public Class SUV : ICar<SUVInfo>
{
int ID { get; set; }
SUVInfo Info { get; set; }
}
关于c# - 使用接口(interface)属性实现的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58750040/