インターフェース(入門)と複数インターフェースの実装
インターフェースを契約として定義し、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 のインターフェイスにはフィールドもメソッド本体もありません。
- 動作を組み合わせるには複数のインターフェイスを実装します。
インターフェイスの概念
まとめ
まとめ:インターフェイスは契約であり、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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- virtual/override/sealedとabstractクラス
- インターフェース(入門)と複数インターフェースの実装
- ポリモーフィズムと動的ディスパッチ