接口方法(定义)依赖于在同一接口中定义的另一个方法(定义)


public interface ICar
{
    bool IsSpeeds200KMPH(CarData carData);
    bool IsABSEnabled(CarData carData);
    int doors {get;set;}
    int wheels {get;set;}
    bool IsABSAdvanced();
    bool IsSpeedReaches225();
    void drive(CarType car);
}
public class BMW : ICar
{
}
public class Honda : ICar
{
}
// factory class to create car object dynamically
public class CarFactory
{
    public ICar CreateCar(CarType car)
    {
        if(car == TypesOfCars.Honda)
            return new Honda;
        else if(car == TypesOfCars.BMW)
            return new BMW;
        //....
    }
}

//main() method snippet
CarFactory factory = new CarFactory();
ICar carType = facory.CreateCar(DynamicallyProvided_CarTypeValue);
carType.IsABSEnabled(DynamicallyProvided_carData);
carType.IsABSAdvanced();
在上面的例子中,我已经实现了策略模式。我的问题是,我有不同的Car类实现ICar接口。方法IsABSAdvanced()只能在方法IsABSEnabled()返回true时调用,否则它应该只返回false。因此,如何使一个接口方法(定义)依赖于同一接口中定义的另一个方法(定义)?是否有任何方法将限制限制在接口级别,这样访问IsABSAdvanced()的任何人都不应该知道它实际上在内部检查IsABSEnabled()方法。是否有这样的可行性,或者我如何才能实现它?

你要找的是抽象类

接口只包含一个类应该包含的API的信息,而不包含它自带的逻辑。

如果你想要逻辑在上面,你有几个选项-一个,例如:

public interface ICar
{
    bool IsSpeeds200KMPH(CarData carData);
    bool IsABSEnabled(CarData carData);
    int doors {get;set;}
    int wheels {get;set;}
    bool ABSAdvanced{get;};
    bool IsSpeedReaches225();
    void drive(CarType car);
}
public abstract class AbstractCar : ICar {
    public bool ABSAdvanced {
        get {
            if(!isABSEnabled()) {
                return false;
            }
            /* some additional logic based on the interface */
            /* ... */
            return true;
        }
    }
}

,然后所有的汽车扩展AbstractCar -因为AbstractCar是一个抽象类,它将不能被实例化为一个对象。

你的问题也可以简化为:

public abstract class AbstractCar : ICar {
    public bool ABSAdvanced { get {return isAbsEnabled();} }
}

如果isABSEnabled是公共API的一部分,则再次使ABSAdavanced冗余,这取决于实现细节。

最新更新