c# - 使用接口(interface)属性实现的接口(interface)

标签 c# .net interface

我有一个类,它有一个属性是另一个接口(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/

相关文章:

C# 手动线程

c# - 消除删除空目录算法中的递归

Python .net 框架引用参数 Double[]&

c# - 从独立存储加载文件的最佳方式

c# - 如何拆分双或多个空行? Regex.Split 添加不需要的字符串

c# - CsvHelper 映射常量值

c# - C# 和 C++ (.net) 的互操作性

c# - java是否像c#一样支持显式接口(interface)实现?

Java 接口(interface)命名约定

java - 第一次实现java接口(interface),无法编译成功