この質問の回答が、基本インターフェイスを定義する際に拡張メソッドの使用を推奨する理由を説明してください。- それぞれのインターフェイスに 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();
}
}