访问不在基接口上的方法

本文关键字:方法 接口 访问 | 更新日期: 2023-09-27 17:50:17

我有一个设计问题,正在寻找最好的设计解决方案。我在下面添加了一个问题的例子。

public interface IVehicle<T>
{
    int GetEngineSize();
}
public class Car : IVehicle<Car>
{
    public int GetEngineSize()
    {
        throw new NotImplementedException();
    }
    public bool HasSpolier()
    {
        return true;
    }
}
public class Bus : IVehicle<Bus>
{
    public int GetEngineSize()
    {
        throw new NotImplementedException();
    }
}
public abstract class BaseController<T>
{
    public IVehicle<T> Repository { get; set; }
}
public abstract class CarController : BaseController<Car>
{
    public CarController()
    {
        // How can I access the HasSpolier method from the IVehicle<T> without having to cast the Interface to concrete class Car
        bool result = Repository.HasSpolier();
    }
}

访问不在基接口上的方法

我不确定你的泛型是否在做你想要的。

如果不是

IVehicle<T> Repository {get; set;}

你做

T Repository {get; set;}

你可以让

public abstract class BaseController<T> where T : IVehicle

确保它们属于IVehicle接口

那么你就有了一个类型化的存储库,并且可以访问你的spoiler方法。

您正在做IVehicle<Bus>,但至少在示例代码中,T从未在接口中使用。此时T是没有价值的

除非在接口中实现该方法,否则如果不将其强制转换为另一个类,则无法访问该方法。

您必须将Repository转换为Car。

这会使使用你的接口变得毫无意义,因为你试图删除的对实现的依赖被重新引入。

接口上的type参数也不是必需的,你不会在接口的其他地方使用它…

public interface IVehicle
{
    int GetEngineSize();
}
相关文章: