ポリモーフィックな振る舞い
インターフェースベースのポリモーフィズムを使い、異なる図形を一様に処理します。呼び出し側を変更せずに新しい図形を追加し、小さな振る舞いを組み合わせます。
「ポリモーフィックな振る舞い」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。
ポリモーフィズムの概要
目標: ポリモーフィズムを使用して、呼び出し側をシンプルに保ちます。
- どこでも IShape を扱います
- 1 つのリストに多くの図形を混在させます
- コードを変更せずに新しい図形を追加します
- 小さな振る舞い(書式設定、フィルタリング)を組み合わせます
すべての図形に共通する 1 つの API
ヘルパーでは IShape インターフェイスを受け取ります。実行時ディスパッチによって、適切な実装が選択されます。
using System;
public interface IShape
{
double Area();
double Perimeter();
}
public sealed class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
public sealed class Circle : IShape
{
private readonly double _r;
public Circle(double r) { _r = r; }
public double Area() { return 3.14159 * _r * _r; }
public double Perimeter() { return 2 * 3.14159 * _r; }
}
public class Program
{
// One function works for any IShape (dynamic dispatch on overrides)
static void PrintSummary(IShape s)
{
Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter());
}
public static void Main(string[] args)
{
PrintSummary(new Rectangle(3, 4));
PrintSummary(new Circle(2));
}
}
混在したリストの処理
多くの図形を List<IShape> に格納します。インスタンスごとに振る舞いが異なっていても、反復処理はシンプルなままです。
using System;
using System.Collections.Generic;
public interface IShape { double Area(); double Perimeter(); }
public sealed class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
public sealed class Circle : IShape
{
private readonly double _r;
public Circle(double r) { _r = r; }
public double Area() { return 3.14159 * _r * _r; }
public double Perimeter() { return 2 * 3.14159 * _r; }
}
public class Program
{
public static void Main(string[] args)
{
List<IShape> shapes = new List<IShape>();
shapes.Add(new Rectangle(2, 5));
shapes.Add(new Circle(1.5));
shapes.Add(new Rectangle(1, 1));
foreach (IShape s in shapes)
{
Console.WriteLine("A=" + s.Area());
}
}
}
拡張に対してオープンにする
ポリモーフィズムは拡張に対してオープンな設計を支えます。既存の呼び出し側を編集せずに、新しい図形を組み込めます。
using System;
public interface IShape { double Area(); double Perimeter(); }
public sealed class Triangle : IShape
{
private readonly double _a, _b, _c;
public Triangle(double a, double b, double c) { _a = a; _b = b; _c = c; }
public double Perimeter() { return _a + _b + _c; }
public double Area()
{
double s = (_a + _b + _c) / 2.0;
return Math.Sqrt(s * (s - _a) * (s - _b) * (s - _c));
}
}
public class Program
{
// Existing helper still works; no changes needed
static void Show(IShape s) { Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter()); }
public static void Main(string[] args)
{
Show(new Triangle(3, 4, 5)); // new type plugs in
}
}
振る舞いの合成(strategy)
小さなインターフェイス(formatter など)を通じて、小さな振る舞いを組み合わせます。図形を変更せずに戦略を入れ替えられます。
using System;
public interface IShape { double Area(); double Perimeter(); }
public sealed class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
// Small strategy interface for formatting
public interface IShapeFormatter
{
string Format(IShape s);
}
public sealed class SimpleFormatter : IShapeFormatter
{
public string Format(IShape s) { return "A=" + s.Area() + " P=" + s.Perimeter(); }
}
public class Program
{
static void Print(IShape s, IShapeFormatter f)
{
Console.WriteLine(f.Format(s));
}
public static void Main(string[] args)
{
Print(new Rectangle(3, 2), new SimpleFormatter());
}
}
ポリモーフィズムのヒント
ヒント:
- ヘルパーには IShape を渡し、型チェックは避けてください。
- 可能な場合は、ヘルパーを小さく純粋に保ってください。
- 既存の呼び出し側を編集せずに、新しい図形を自由に追加してください。
- 機能を拡張するには、小さな振る舞いのインターフェイス(書式設定、フィルタリング)を使用してください。
インターフェイスの利点
まとめ
まとめ: パラメーターには IShape を使用し、混在したリストを処理し、呼び出し側に触れずに図形を追加します。書式設定やフィルタリングには小さな振る舞いを組み合わせ、コードを柔軟に保ちます。
よくある質問
「ポリモーフィックな振る舞い」レッスンは無料ですか?
はい。「ポリモーフィックな振る舞い」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。
「ポリモーフィックな振る舞い」で何を学びますか?
インターフェースベースのポリモーフィズムを使い、異なる図形を一様に処理します。呼び出し側を変更せずに新しい図形を追加し、小さな振る舞いを組み合わせます。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。
「ポリモーフィックな振る舞い」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 設計(インターフェースと継承)
- 実装とテスト
- ポリモーフィックな振る舞い