C# のインターフェイスにプロパティを実装する

Bilal Shahid 2023年10月12日
  1. 単純なコードブロックを使用して、インターフェイスにプロパティを設定する
  2. C# のインターフェイスのプロパティの変更
  3. 抽象クラスで複数のインターフェイス継承を使用してプロパティを実装する
  4. まとめ
C# のインターフェイスにプロパティを実装する

今日は、C# のインターフェイスにプロパティを実装する方法を学習します。

C# のインターフェイスには、プロパティの可用性を宣言する方法を指定するアクセス修飾子とともに、さまざまなプロパティを含めることができます。インターフェイスは、多くの場合、さまざまなメンバーやオブジェクトのデフォルトの実装として機能します。

始めて、インターフェースにプロパティを実装するためのさまざまな方法を見てみましょう。

単純なコードブロックを使用して、インターフェイスにプロパティを設定する

TORQUE プロパティを使用して、ENGINE と呼ばれる C# のインターフェイスを作成するとします。インターフェイス ENGINE を次のように設定します。

public interface ENGINE {
  int torque { get; set; }
}

したがって、TORQUE と呼ばれるそのプロパティの適切なゲッターとセッターを備えたインターフェースを作成しました。インターフェイスを使用するには、先に進んで、このインターフェイスを実装できるクラスを定義する必要があります。

ENGINE を含む CAR クラスを定義するとします。したがって、次のように書くことができます。

class CAR : ENGINE {
  public int torque { get; set; }
}

CAR クラスには、このクラスからオブジェクトを作成するときに公開するための TORQUE の実装が含まれていることに注意してください。CAR オブジェクトを使用するには、次のように呼び出すだけです。

CAR x = new CAR();
x.torque = 989;
Console.WriteLine(x.torque);

したがって、さまざまなプロパティを使用して、後で使用するためにそれらをインターフェイスに含めることができます。これにより、抽象化レイヤーが改善され、メインのメソッドやクラスを変更せずに変更できるようになります。

したがって、LABEL という新しいプロパティを ENGINE に追加する場合は、クラス CAR で使用できるインターフェイス ENGINE に設定できます。

コード全体は次のようになります。

using System;

namespace CA_ONE {
  class Program {
    public interface ENGINE {
      int torque { get; set; }
    }

    class CAR : ENGINE {
      public int torque { get; set; }
    }

    static void Main(string[] args) {
      CAR x = new CAR();
      x.torque = 989;
      Console.WriteLine(x.torque);
    }
  }
}

プロジェクトに CA_ONE という名前を付けました。したがって、名前空間はそれを拡張して実装します。ここでもう 1つ注意すべき点は、CAR での TORQUE の実装では、PRINT メソッドやトル​​ク変換など、関数内に他の定義を含めることができるということです。

C# のインターフェイスのプロパティの変更

上記のソリューションでは、実装内で他のメソッドを定義する方法について説明しました。インターフェイス ENGINE でデフォルトとして定義されている GET メソッドと SET メソッドを拡張したいとします。

ENGINE はそのままにしておきますが、それを拡張するクラス CAR 内のコードを変更する傾向があります。

CAR では、TORQUE を設定するときに、TORQUE プロパティが正しく設定されているかどうかをユーザーが知るために、"Torque is Set to _value_"を出力することもできます。

したがって、先に進んで次のようにすることができます。

class CAR : ENGINE {
  private int torque_priv;
  public int torque {
    get { return this.torque_priv; }
    set {
      this.torque_priv = value;
      Console.WriteLine("This torque has been set to " + torque_priv);
    }
  }
}

ここで、コードで何が起こっているかに焦点を当てましょう。最初に気付くのは、TORQUE_PRIV と呼ばれる別の変数の使用です。

次のコードで渡された TORQUE 値を保存する必要があるため、インスタンス化しました。

x.torque = 989;

これではなく、TORQUE_PRIV 変数を使用しない場合、コードはループに陥り、再帰的に移動して TORQUE プロパティに値を割り当てます。また、ここでは VALUE と呼ばれるものを使用しました。

VALUE は変数ではなく、C# 内のコンテキストキーワードであることに注意してください。VALUE は、プロパティおよびアクセス宣言のセットインデクサーで使用されます。

クライアントによって割り当てられた値を受け取り、それをクラスのプライベート変数に割り当てます。このようにして、宣言を変更して使用できます。

多くの人は、抽象的な CARTORQUE のセッターで次のコードを使用します。

this.torque_priv = torque;

そしてゲッターのために:

return torque;

これにより、再帰ループでスタックするため、次のエラーが発生します。

Stack overflow.

インターフェイスにプロパティを実装するための一般的な構文は次のとおりです。

type name { get; set; }

複数のクラスがインターフェイスを継承して使用できるため、抽象クラスのプロパティを拡張および変更する方が適しています。インターフェイスは、さまざまなメソッドを実装する際のバックボーン構造として機能し、拡張するものと拡張しないものの基本的な考え方を提供します。

インターフェイスを直接使用することはできないことに注意してください。コードの実行中に抽象クラスを初期化して使用する必要があります。

インターフェイスのメソッドは常にパブリックであり、暗黙的なアクセス修飾子は必要ありません。また、インターフェイスは他のインターフェイスから継承できます。

インターフェイスにプロパティを実装しようとしていて、別のインターフェイスが以前に定義されたものを継承している場合は、クラスを使用して後者のインターフェイスを拡張できます。

BOLTS を継承し、次にクラス CAR によって継承されるインターフェース ENGINE があると仮定します。各 CAR のボルト寸法に応じたレンチサイズの緊急キットを取り付けたいと思います。

したがって、次のように実装を使用できます。

public interface BOLT {
  int size { get; set; }
}

public interface ENGINE : BOLT {
  int torque { get; set; }

次に、クラス CARBOLT を次のように拡張します。

public int size {
  get { return wrench_size; }
  set {
    // set the wrench size
    wrench_size = value;
    Console.WriteLine("The wrench size to use should be: " + wrench_size);
  }
}

したがって、どのインターフェイスも継承されていることがわかります。ベースインターフェイスでプロパティを設定する場合は、ベースインターフェイスまたは派生インターフェイスのいずれかを拡張するすべてのクラスにそのプロパティを実装する必要があります。

したがって、定義を拡張する必要があります。

抽象クラスで複数のインターフェイス継承を使用してプロパティを実装する

ENGINEWHEEL の 2つのインターフェースがあるとしましょう。また、どちらにも start メソッドが含まれており、ENGINE または WHEEL が開始したかどうかを示します。

start メソッドを定義しましょう。

public interface WHEEL {
  void print();
}

public interface ENGINE : BOLT {
  int torque { get; set; }
  void print();
}

CAR クラスで拡張するには、次のようにいくつかの関数を作成する必要があります。

void WHEEL.print() {
  Console.WriteLine("Wheel has been started");
}
void ENGINE.print() {
  Console.WriteLine("Engine has been started!");
}

そしてそれらを呼び出すために、メインで次のように何かを書いてください:

((WHEEL)x).print();

これは、print() メソッドを使用するインターフェイスを指定するためのものです。

このチュートリアルで使用されている完全なコードにアクセスしますここ

まとめ

インターフェイスでプロパティを使用する方法は以上です。プロパティを設定して使用する必要がある状況はさまざまです。したがって、上記のすべてのケースを調査することをお勧めします。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub