C#のマルチインヒェリタンス:実用的な方法
潜在的なコードの複雑さのため、C#自体は複数の継承をサポートしていません(クラス継承は複数の基本クラスからのものです)。ただし、同様の機能を効果的に実装できるいくつかの代替方法があります。
継承
複数の継承をシミュレートする代わりに、組み合わせの使用を検討することをお勧めします。必要な属性と動作を表すインターフェイスを定義し、これらのインターフェイスの組み合わせクラスを使用します。たとえば、インターフェイスは
の属性を表すことができ、インターフェイスはISteerable
プロパティを表すことができます。 SteeringWheel
IBrakable
拡張メソッドBrakePedal
C#3.0ソースコードを変更せずにクラスを拡張できる拡張メソッドを導入します。拡張方法を使用して、コンビネーション属性コールメソッドの操作を簡素化できます。たとえば、次のコードの例に示すように、およびの拡張方法を作成して、や
などのメソッドを提供できます。
ISteerable
実用的な例IBrakable
SteerLeft()
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>
とクライアントクラスのインスタンスを継承する新しいクラスを作成して、を達成します。
を継承し、何らかの方法で
(推奨されない)を達成します。Component
これら2つの方法は、各メソッドに対して操作する必要があります。ただし、組み合わせ方法と拡張メソッドを使用すると、2つのインターフェイスを1つのクラスに組み合わせて、競合を回避し、メンテナンスを簡素化できます。
ITextTcpClient
以上がC#で複数の継承を効果的にシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。