有人請解釋爲什麼this question中的答案主張在定義基本接口時使用擴展方法。 - 爲什麼不在他們各自的接口中包含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();
}
}
在這種情況下,如果您有許多「ISteerables」,並且您不想複製粘貼相同的方法體到它們全部中,這會很有用。 –
如果您對該特定答案有疑問,那麼爲什麼不*詢問編寫答案的人*? –
@EricLippert - 因爲原來的線程是在不同的主題。我的興趣是教育,在更廣泛(比多繼承)的意義。代碼示例與註釋一起提示了一個與多重繼承不同的主題。 –