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

interface method (definition) dependent on another method (definition) defined in same interface

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() return 为真时才能调用,否则它应该 [=27] =] 错误。因此,如何使一个接口方法(定义)依赖于同一接口中定义的另一种方法(定义)?有什么方法可以限制接口级别的限制,这样任何访问 IsABSAdvanced() 的人都不知道它实际上检查了 IsABSEnabled() 内部方法。有没有这种可行性,不然怎么实现?

您要找的是抽象的 classes.

接口仅包含有关 API 和 class 应该包含的信息 - 而不是它附带的逻辑。

如果你想在它之上添加逻辑,你有几个选择——一个,例如:

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 是一个抽象 class 它将无法实例化为一个对象。

您的问题也可以通过以下方式简化:

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

如果 isABSEnabled 是 public API 的一部分,则根据实施细节,这又使 ABSAdavanced 变得多余。