C# のインターフェイスと抽象クラス

Bilal Shahid 2024年2月15日
C# のインターフェイスと抽象クラス

クラスには、C# のさまざまな指定子があります。 今日は 2つのクラスについて話します。 インターフェイスおよび抽象クラス。

C# における抽象クラスとインターフェイス クラスの違い

インターフェイスとは、何かがどのように機能するかを定義するものです。 ものに関するガイドラインまたは基本的なセットアップを提供し、オブジェクト間で通信する必要があります。

インターフェイスは、メソッドを実装するか、どの機能を作成するか、または必要とするかを伝えるだけです。 基本的なセットアップのみを提供します。 残りは、必要に応じてこれらの関数を実装および拡張するために継承するクラスにあります。

したがって、CAR クラスと BIKE クラスがある場合、これらのクラス (CAR と BIKE) の両方に共通の機能を含むことができるインターフェイス VEHICLE を継承できます。 get_engine_vid(), set_color() など。ここでの VEHICLE はインターフェイスとして機能します。

インターフェイスが、クラス内で標準定義プロトコルを維持するのにどのように役立つかがわかります。 インターフェイス内で宣言されているすべてのメソッドは拡張されており、拡張する必要があります。

コード例:

interface VEHICLE {
  int get_engine();
  void set_engine_id();
}

class BIKE : VEHICLE {
  private : int engine_id;
  BIKE() {}
}

class CAR : VEHICLE {
  private : int engine_id;
  CAR() {}
}

このコードはエラーを表示します。

コード エラー

これを修正するために、次のコードで継承された各クラスにメソッドを実装します。

固定コード:

interface VEHICLE {
  public int get_engine();
  public void set_engine_id(int id);
}

class BIKE : VEHICLE {
  private int engine_id;
  BIKE() {}
  public

      int get_engine() {
    return engine_id;
  }

  public void set_engine_id(int id) {
    engine_id = id;
  }
}

class CAR : VEHICLE {
  private int engine_id;
  CAR() {}

  public

      int get_engine() {
    return engine_id;
  }

  public void set_engine_id(int id) {
    engine_id = id;
  }
}

インターフェイスについて明確になったので、C# の抽象クラスを見てみましょう。

コード例:

abstract class VEHICLE {
  public abstract int get_engine();
  public abstract void set_engine_id(int id);
}

class BIKE : VEHICLE {
  private int engine_id;
  public BIKE() {}
  public

      override int get_engine() {
    return engine_id;
  }

  public override void set_engine_id(int id) {
    engine_id = id;
  }
}

class CAR : VEHICLE {
  private int engine_id;
  public CAR() {}

  public

      override int get_engine() {
    return engine_id;
  }

  public override void set_engine_id(int id) {
    engine_id = id;
  }
}

static void Main() {
  CAR n = new CAR();
  n.set_engine_id(2);
  Console.WriteLine("The engine id is: " + n.get_engine());
}

抽象クラスで宣言された関数を拡張するために、ここで override を設定する傾向があることがわかります。 違いは何ですか?

抽象クラスは、同じ基本構造を持つ複数のクラスに使用されますが、インターフェイスは、実装可能なメソッドを定義するためにのみ使用される場合があります。 このような構造を継承する場合と継承しない場合がある複数のクラスに使用する必要はありません。

抽象クラスは、メソッドのデフォルトの実装も定義できます。 ただし、これはインターフェイスには当てはまりません。

完全に機能させるには、override を削除する必要があります。

固定コード:

abstract class VEHICLE {
  public int get_engine() {
    Console.Write("I am here");
    return -1;
  }
  public abstract void set_engine_id(int id);
}

// and then in the classes:
// code c#
class BIKE : VEHICLE {
  private int engine_id;
  public BIKE() {}
  public

      int get_engine() {
    return engine_id;
  }

  public override void set_engine_id(int id) {
    engine_id = id;
  }
}

class CAR : VEHICLE {
  private int engine_id;
  public CAR() {}

  public

      int get_engine() {
    return engine_id;
  }

  public override void set_engine_id(int id) {
    engine_id = id;
  }
}

抽象クラスとインターフェースについては以上です。 違いをご理解いただき、効率よくご利用いただければ幸いです。

著者: 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

関連記事 - Csharp Class