0Pricing
C# Academy · レッスン

インターフェース(入門)と複数インターフェースの実装

インターフェースを契約として定義し、1つのクラスに複数のインターフェースを実装します。インターフェースベースのポリモーフィズムと、明示的なインターフェース実装の基礎も学びます。

「インターフェース(入門)と複数インターフェースの実装」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。

インターフェイスの概要

目標:柔軟なコードのためにインターフェイスを対象にプログラミングします。

  • インターフェイスは方法ではなく何をするかを宣言します
  • 複数のインターフェイスを実装します
  • 関数にインターフェイスを渡します
  • 名前の衝突を解決するには明示的実装を使用します

複数のインターフェイスの実装

インターフェイスは契約を定義します。1つのクラスで複数のインターフェイスを実装し、異なる役割を表現できます。

using System;

public interface IPlayable
{
  void Play();
}

public interface IHasDuration
{
  int DurationSeconds { get; }
}

public class Song : IPlayable, IHasDuration
{
  private readonly string _title;
  private readonly int _seconds;

  public Song(string title, int seconds)
  {
    _title = title;
    _seconds = seconds;
  }

  public int DurationSeconds { get { return _seconds; } }

  public void Play()
  {
    Console.WriteLine("Playing " + _title + " (" + _seconds + "s)");
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Song s = new Song("Hello", 5);
    s.Play();
    Console.WriteLine("Duration = " + s.DurationSeconds);
  }
}

インターフェイスによるポリモーフィズム

メソッドではインターフェイス型を受け取ります。呼び出し元は任意の実装を渡せます。

using System;

public interface IPrintable
{
  void Print();
}

public class Report : IPrintable
{
  private readonly string _text;
  public Report(string text) { _text = text; }
  public void Print() { Console.WriteLine("Report: " + _text); }
}

public class Label : IPrintable
{
  private readonly string _text;
  public Label(string text) { _text = text; }
  public void Print() { Console.WriteLine("Label: " + _text); }
}

public class Program
{
  // Works with any IPrintable (polymorphism)
  static void PrintAll(IPrintable item)
  {
    item.Print();
  }

  public static void Main(string[] args)
  {
    PrintAll(new Report("Sales Q1"));
    PrintAll(new Label("Fragile"));
  }
}

明示的実装

明示的実装は、同じ名前のメンバーを区別し、クラスの公開面から隠します。

using System;

public interface ILogger { void Write(string msg); }
public interface IFileWriter { void Write(string msg); }

public class DualWriter : ILogger, IFileWriter
{
  // Explicit implementations: only visible via the interface reference
  void ILogger.Write(string msg) { Console.WriteLine("[LOG] " + msg); }
  void IFileWriter.Write(string msg) { Console.WriteLine("[FILE] " + msg); }

  public void Demo()
  {
    Console.WriteLine("DualWriter ready");
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    DualWriter dw = new DualWriter();
    dw.Demo();

    ILogger log = dw;
    IFileWriter file = dw;

    log.Write("started");
    file.Write("saved");
  }
}

インターフェイスのコレクション

異なる実装をインターフェイス型のリストに格納し、同じ方法で反復処理できます。

using System;
using System.Collections.Generic;

public interface ITask
{
  void Run();
}

public class EmailTask : ITask
{
  public void Run() { Console.WriteLine("Send email"); }
}

public class BackupTask : ITask
{
  public void Run() { Console.WriteLine("Run backup"); }
}

public class Program
{
  public static void Main(string[] args)
  {
    List<ITask> tasks = new List<ITask>();
    tasks.Add(new EmailTask());
    tasks.Add(new BackupTask());

    foreach (ITask t in tasks)
    {
      t.Run(); // calls the right implementation
    }
  }
}

インターフェイスのヒント

ヒント:

  • 1つの役割を表す小さなインターフェイスを優先します。
  • テストにはインターフェイスを使用します(実装を差し替えます)。
  • C# 6 のインターフェイスにはフィールドもメソッド本体もありません。
  • 動作を組み合わせるには複数のインターフェイスを実装します。

インターフェイスの概念

C# のインターフェイスについて正しい説明はどれでしょうか?

まとめ

まとめ:インターフェイスは契約であり、1つのクラスで複数の実装をサポートします。関数にインターフェイスを渡し、インターフェイスは小さく保ち、衝突の解決には明示的実装を使用します。

よくある質問

「インターフェース(入門)と複数インターフェースの実装」レッスンは無料ですか?

はい。「インターフェース(入門)と複数インターフェースの実装」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。

「インターフェース(入門)と複数インターフェースの実装」で何を学びますか?

インターフェースを契約として定義し、1つのクラスに複数のインターフェースを実装します。インターフェースベースのポリモーフィズムと、明示的なインターフェース実装の基礎も学びます。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。

「インターフェース(入門)と複数インターフェースの実装」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. virtual/override/sealedとabstractクラス
  2. インターフェース(入門)と複数インターフェースの実装
  3. ポリモーフィズムと動的ディスパッチ
← C# Academyに戻る