接口方法(定义)依赖于同一接口中定义的另一个方法(定义)
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
变得多余。
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
变得多余。