ホームページ > バックエンド開発 > C++ > C#で複数の継承を効果的にシミュレートするにはどうすればよいですか?

C#で複数の継承を効果的にシミュレートするにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-29 20:43:10
オリジナル
434 人が閲覧しました

How Can I Effectively Simulate Multiple Inheritance in C#?

C#のマルチインヒェリタンス:実用的な方法

潜在的なコードの複雑さのため、C#自体は複数の継承をサポートしていません(クラス継承は複数の基本クラスからのものです)。ただし、同様の機能を効果的に実装できるいくつかの代替方法があります。

継承

複数の継承をシミュレートする代わりに、組み合わせの使用を検討することをお勧めします。必要な属性と動作を表すインターフェイスを定義し、これらのインターフェイスの組み合わせクラスを使用します。たとえば、インターフェイスは

の属性を表すことができ、

インターフェイスはISteerableプロパティを表すことができます。 SteeringWheel IBrakable拡張メソッドBrakePedal

C#3.0ソースコードを変更せずにクラスを拡張できる拡張メソッドを導入します。拡張方法を使用して、コンビネーション属性コールメソッドの操作を簡素化できます。たとえば、次のコードの例に示すように、およびの拡張方法を作成して、

などのメソッドを提供できます。

ISteerable実用的な例IBrakableSteerLeft() Stop()既存のテキストベースのTCPクライアント(ITEXTTCPCLIENT)がWindows Windowsで使用されていることを考慮しています。 2つの一般的な方法があります

<code class="language-csharp">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() // 注意这里将main改为了Main
    {
        myCar.SteerLeft();
        myCar.Stop();
    }
}</code>
ログイン後にコピー

とクライアントクラスのインスタンスを継承する新しいクラスを作成して、を達成します。

を継承し、何らかの方法で

(推奨されない)を達成します。
  1. Componentこれら2つの方法は、各メソッドに対して操作する必要があります。ただし、組み合わせ方法と拡張メソッドを使用すると、2つのインターフェイスを1つのクラスに組み合わせて、競合を回避し、メンテナンスを簡素化できます。 ITextTcpClient
  2. 継承と拡張メソッドの組み合わせモードを使用することにより、コードのシンプルさと読みやすさを維持しながら、C#の複数の継承を効果的にシミュレートできます。

以上がC#で複数の継承を効果的にシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート