0

请有人解释为什么这个问题的答案提倡在定义基本接口时使用扩展方法。- 为什么不在各自的接口中包含 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();
    }
}
4

2 回答 2

4

使用扩展方法的要点是method即使您没有Source codeor it也可以添加到现有的 .Net 类中reside within different assembly

扩展方法有助于

  1. 这些方法可以在类型已经发布之后(在类型创作时间之后)添加。
  2. 扩展方法可以针对接口。
  3. 不同的人可以根据自己的需要以不同的方式扩展相同的类型。

以 LINQ 为例,它提供了适用于任何IEnumerable类型的方法!

于 2013-04-13T15:40:29.840 回答
1

EM不是多重继承的替代品,也不是继承机制。顾名思义,它只是一个工具,可以通过您的方式扩展 某种类型的功能。

在这个具体的代码中,没有太多的使用意义EM。正如您所指出的,您可以轻松地扩展该类的功能,只需在其主体中添加一个新方法。

EM在您无法更改课程的原始来源或不允许这样做的情况下非常有用。

于 2013-04-13T15:41:57.533 回答