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がなくても、既存の .Net クラスに追加できることです。Source codereside within different assembly

そして、拡張メソッドはに役立ちます

  1. これらのメソッドは、型が既に発行された後で (型の作成時よりも) 追加できます。
  2. 拡張メソッドは、インターフェイスを対象にすることができます。
  3. さまざまな人が同じ型を必要に応じて異なる方法で拡張できます。

LINQ を例にとると、あらゆるIEnumerable型で機能するメソッドが提供されます。

于 2013-04-13T15:40:29.840 に答える
1

EM多重継承の代替ではなく、継承メカニズムではありません。 名前が示すように、あるタイプの機能をあなたの手段で拡張するための単なるツールです。

この具体的なコードでは、 を使用する意味はあまりありませんEM。お気づきのように、本体内に新しいメソッドを追加するだけで、クラスの機能を簡単に拡張できます。

EMクラスの元のソースを変更できない場合、または変更が許可されていない場合に非常に役立ちます。

于 2013-04-13T15:41:57.533 に答える