C# のインターフェイスとは何か (例付き)

⚡ スマートサマリー

C# のインターフェースは、tracこれは、実際のコードを提供することなく、クラスが実装しなければならないメソッドとプロパティを指定するものです。実装クラスは具体的な動作を提供し、関連性のない型間での疎結合と多重継承を可能にします。

  • 🔗 とともにtract: インターフェースは、実装するすべてのクラスが定義しなければならないメソッドとプロパティのシグネチャを宣言します。
  • 実装なし: インターフェースには宣言のみが含まれるため、実際のメソッドコードはクラスが記述します。
  • 🔑 キーワード: interfaceキーワードは型を作成し、クラスはコロンを使用してそれを実装します。
  • 🔀 複数のインターフェース: 1つのクラスが複数のインターフェースを実装できるため、C#では多重継承のような機能が実現できる。
  • インターフェース対アブソリュートtractクラス: インターフェースは動作のみを定義するが、tractクラスは、共有状態やコードを保持することもできます。
  • 🤖 AI支援: GitHub Copilot はインターフェースと実装をスキャフォールディングし、ML.NET パイプラインはインターフェースベースのトランスフォーマーコンストラクタに依存していますtracTS。

C# のインターフェース

C# のインターフェイスとは何ですか?

An インタフェース C# では、クラスとともに使用され、コンテキストを定義します。tracインターフェースとは、クラスがアプリケーションに提供する内容に関する合意のことです。インターフェースは、クラスが実行できる操作を定義します。インターフェースはプロパティとメソッドを宣言します。メソッドが具体的に何を行うかを定義するのは、クラスの役割です。

コンソール アプリケーションのクラスを変更することによるインターフェイスの例を見てみましょう。 インターフェイスを使用して実行できるものは何もないため、コードは実行されないことに注意してください。

C# インターフェイスの例

インターフェースクラスを作成しましょう。クラス名は「Guru99Interface」。メインクラスは、定義されたインターフェースを継承します。すべてのコードはProgram.csファイルに記述する必要があります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 interface IGuru99Interface
 {
  void SetTutorial(int pID, string pName);
  String GetTutorial();
 }

 class Guru99Tutorial : IGuru99Interface
 {
  protected int TutorialID;
  protected string TutorialName;

  public void SetTutorial(int pID, string pName)
  {
   TutorialID = pID;
   TutorialName = pName;
  }

  public String GetTutorial()
  {
   return TutorialName;
  }

  static void Main(string[] args)
  {
   Guru99Tutorial pTutor = new Guru99Tutorial();

   pTutor.SetTutorial(1,".Net by Guru99");

   Console.WriteLine(pTutor.GetTutorial());

   Console.ReadKey();
  }
 }
}

Code 説明:-

ここでは、コードの重要な部分について説明します。

C# インターフェイスの例

  1. まず、インターフェースを定義します。Guru99Interface。キーワード「interface」はインターフェースを定義するために使用されることに注意してください。
  2. 次に、インターフェースで使用されるメソッドを定義します。この場合、これまでのすべての例で使用されているのと同じメソッドを定義します。インターフェースはメソッドを宣言するだけであることに注意してください。メソッド内のコードは定義しません。
  3. 次に私たちは Guru99Tutorial クラスはインターフェースを拡張します。ここで、インターフェースで宣言されたさまざまなメソッドを定義するコードを記述します。このコーディングによって、次のことが実現されます。
    • これにより、クラスが Guru99Tutorial は、「SetTutorial」と「GetTutorial」メソッドに必要なコードのみを追加し、それ以外のコードは一切追加しません。
    • また、インターフェースがコンソールのように動作することも保証します。tract. その class 規約を遵守しなければならないtract。だから、もしconがtract には「SetTutorial」と「GetTutorial」という 2 つのメソッドが必要だと書いてあるなら、そのようにすべきです。

C# インターフェース vs 絶対値tractクラス

初心者によくある質問は、C# インターフェースが他のインターフェースとどう違うかということです。 腹筋tractクラスどちらもconを定義するtrac他のタイプも同様のアプローチをとるが、それぞれ異なる設計目標に基づいている。

主な相違点は以下のとおりです。

  • 実装: インターフェースには宣言のみが含まれますが、tractクラスは両方のアブスを提供できますtract メンバーと完全に実装されたメソッド。
  • 多重継承: クラスは多くのインターフェースを実装できますが、継承できるのは 1 つのインターフェースのみです。tractクラス。
  • 状態: 腹筋tracクラスはフィールド、コンストラクタ、およびデータを含むプロパティを保持できますが、インターフェースはインスタンスの状態を保存できません。
  • アクセス修飾子: 腹筋tractクラスのメンバーは、public、protected、またはprivateにすることができますが、従来のインターフェースのメンバーは暗黙的にpublicです。
  • 使用事例: インターフェースを使用して、関連性のない型に機能を追加し、絶対値tract クラスは、密接に関連する型間で共通のコードを共有します。

つまり、インターフェースはクラスができることを説明するものであり、絶対的な定義はクラスができることを説明するものである。tractクラスは、その実行方法の一部を定義することもできます。

C#で複数のインターフェースを実装する方法

クラス継承とは異なり、C#では1つのクラスが複数のインターフェースを実装できます。これにより、複数の基底クラスを同時に継承することによって生じる曖昧さを回避し、安全な多重継承を実現できます。

複数のインターフェースを実装するには、クラス名の後にそれらを列挙し、それぞれをカンマで区切ります。その後、クラスは、実装する各インターフェースで宣言されているすべてのメソッドを定義する必要があります。

ステップ1) それぞれ独自のメソッドを持つ2つのインターフェースを宣言します。

ステップ2) 両方のインターフェースを実装するクラスを作成し、インターフェース名はカンマで区切ってください。

ステップ3) 各インターフェースで宣言されたすべてのメンバーに対して、メソッド本体を提供してください。

以下の例は、I と I の両方を実装する Document クラスを示しています。Readable そして、IWritableインターフェース。

using System;
namespace DemoApplication
{
 interface IReadable
 {
  void Read();
 }
 interface IWritable
 {
  void Write();
 }
 class Document : IReadable, IWritable
 {
  public void Read()
  {
   Console.WriteLine("Reading the document");
  }
  public void Write()
  {
   Console.WriteLine("Writing to the document");
  }
  static void Main(string[] args)
  {
   Document doc = new Document();
   doc.Read();
   doc.Write();
   Console.ReadKey();
  }
 }
}

Code 説明:-

  1. 2 つのインターフェースを宣言します。Readable そしてIWritable。各インターフェースは、本体を持たない単一のメソッドを宣言します。
  2. Document クラスは、コロンの後に両方のインターフェースをカンマで区切ってリストするので、両方の接続を尊重することに同意します。tracTS。
  3. このクラスは、Read メソッドと Write メソッドを定義します。ping どちらの方法でもコンパイル時エラーが発生します。
  4. Main メソッドは Document オブジェクトを作成し、両方のメソッドを呼び出すことで、クラスが 2 つのインターフェースを満たしていることを証明します。

プログラムを実行すると、次のように出力されます。 文書を読む 最初の行と 文書に書き込む 2行目。このパターンは各要素を保持します。trac小さくて焦点が絞られているため、Document クラスはテストや拡張が容易です。

C#でインターフェースを使用する利点

インターフェースは、コードの柔軟性と保守性を向上させるため、プロフェッショナルな C# プロジェクトで広く使用されています。インターフェースを使用すると、trac具体的なクラスではなく、t に。

主な利点は次のとおりです。

  • 緩い結合: Code 特定のクラスではなくインターフェースに依存するため、実装を変更しても呼び出し元に影響はありません。
  • 多重継承: クラスは複数のインターフェースから振る舞いを継承できるが、これは通常のクラス継承では不可能なことである。
  • 妥当性: インターフェースを使用すると、単体テスト中に実際のクラスをモックオブジェクトに簡単に置き換えることができます。
  • 依存性注入: フレームワークは実行時にインターフェースの実装を注入する。これはSOLID原則の根幹をなす考え方である。
  • 一貫性: すべての実装クラスは同じメンバーセットを提供することが義務付けられており、これによりAPIの予測可能性が維持される。

こうした利点から、インターフェースは現代のC#デザインパターンやアプリケーションフレームワークのほとんどにおいて中心的な役割を担っています。

よくあるご質問

慣例として、C# のインターフェイス名は IDisposable や I のように大文字の I で始まります。ReadableI という接頭辞は、その型がクラスや構造体ではなくインターフェースであることを即座に示します。

C# 8.0 より前は、インターフェースには宣言しか含まれていませんでした。C# 8.0 以降では、デフォルトのインターフェースメソッドによってインターフェースがメソッド本体を提供できるようになったため、新しいメンバーが追加されても古い実装が引き続き動作します。

明示的な実装では、メンバーにインターフェースのプレフィックスを付けて名前を付けます。例: IReadable.Read。その後、メンバーはインターフェース参照を介してのみ呼び出し可能になり、2 つのインターフェースが同じメソッドを宣言する場合の名前の衝突を回避します。

はい。インターフェースは、1つまたは複数の他のインターフェースを継承できます。子インターフェースを実装するクラスは、子インターフェースと継承したすべての親インターフェースの両方から、すべてのメソッドを定義する必要があります。

いいえ。インターフェースは実装を持たないため、直接インスタンス化することはできません。インターフェースを実装するクラスのオブジェクトを作成し、そのオブジェクトをインターフェース型を通して参照します。

はい。従来のインターフェースのメンバーは暗黙的にパブリックであり、アクセス修飾子を追加することはできません。実装クラスも、対応するメンバーをパブリックとして宣言する必要があります。

はい。GitHub Copilot は、短いコメントまたはインターフェース名からインターフェースをスキャフォールディングし、メソッドシグネチャを提案し、それを実装するクラスを生成できるため、開発が迅速化されます。tractファースト開発。

ML.NET は、機械学習パイプラインを定義するために ITransformer や IDataView などのインターフェースに依存しています。これらのインターフェースに対してコーディングすると、tractsを使用すると、周囲のトレーニングコードを書き換えることなく、モデルやデータソースを交換できます。