Может кто-нибудь объяснить, почему ответ в 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 - потому что исходная тема была на другом предмете. Мой интерес представляет собой образовательный, в более широком (а не множественном наследовании) смысл. И пример кода, в сочетании с комментариями, намекает на предмет, отличный от множественного наследования. –