如果可以使用普通方法,为什么要使用扩展方法呢?

本文关键字:方法 扩展 为什么 如果可以 如果 可以使 | 更新日期: 2023-09-27 18:09:05

谁能解释一下为什么这个问题的答案提倡在定义基接口时使用扩展方法?-为什么不包括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();
    }
}

如果可以使用普通方法,为什么要使用扩展方法呢?

使用扩展方法的要点是,即使您没有Source codereside within different assembly,您也可以将method添加到现有的。net类中。

和扩展方法有助于

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

以LINQ为例,它提供了在任何IEnumerable类型上工作的方法!

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

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

不能更改类的原始源代码或不允许这样做时,

EM非常有用。