请有人解释为什么这个问题的答案提倡在定义基本接口时使用扩展方法。- 为什么不在各自的接口中包含 SteerLeft() 和 Stop() 方法?- 是为了说明添加不应该/不能被“基地”预期/强迫的行为吗?- 当您需要方向盘时,“强制”一些像“转向”行为这样基本的东西不是更好吗?
下面,我提取了相关代码。回答者说:
您可以使用添加到 C# 3.0 的扩展方法功能来进一步简化对这些隐含属性的调用方法
public interface ISteerable { SteeringWheel wheel { get; set; } }
public interface IBrakable { BrakePedal brake { get; set; } }
public class Vehicle : ISteerable, IBrakable
{
public SteeringWheel wheel { get; set; }
public BrakePedal brake { get; set; }
public Vehicle() { wheel = new SteeringWheel(); brake = new BrakePedal(); }
}
public static class SteeringExtensions
{
public static void SteerLeft(this ISteerable vehicle)
{
vehicle.wheel.SteerLeft();
}
}
public static class BrakeExtensions
{
public static void Stop(this IBrakable vehicle)
{
vehicle.brake.ApplyUntilStop();
}
}
public class Main
{
Vehicle myCar = new Vehicle();
public void main()
{
myCar.SteerLeft();
myCar.Stop();
}
}