c# - 使用接口属性实现接口
问题描述
我有一个类,它有一个属性是另一个接口,如下例所示:
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";
}
我无法使用 ICarInfo 的实现来实现一类 ICar,如示例:
public Class SUV : ICar
{
int ID { get; set; }
SUVInfo Info { get; set; }
}
SUVInfo是ICarInfo,但是出现如下错误:
“SUV”没有实现接口成员“ICar.Info”。“SUV.Info”无法实现“ICar.Info”,因为它没有匹配的“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; }
}
推荐阅读
- javascript - 使用 javascript 访问网站的 API 数据
- python - 通过 Django 站点的管理面板打开表时出错
- qt - 如何确定弹出窗口是否可见(显示在现有屏幕上)?
- cryptocurrency - 如何使用 Binance 设置止盈限价单
- flutter - 如何在 Flutter 中创建具有动态大小和动画项目添加和删除的虚拟化、可重新排序的列表?
- docker - 如何使用 Filebeats 收集 docker 日志?
- reactjs - 如何在 Codesandbox 上的 ChartJS 中使用 React 设置简单的饼图
- mysql - NodeJS Json 仅返回 id?
- c++ - 制作“没有这样的文件或目录”错误 - zlib windows 编译
- gitlab-ci - 报告生成 zap-full-scan