0Pricing
C# Academy · レッスン

ポリモーフィックな振る舞い

インターフェースベースのポリモーフィズムを使い、異なる図形を一様に処理します。呼び出し側を変更せずに新しい図形を追加し、小さな振る舞いを組み合わせます。

「ポリモーフィックな振る舞い」は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 インターフェイスに対してプログラミングする主な利点は何ですか?

まとめ

まとめ: パラメーターには 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フィードバックを取得できます。ローカル設定は不要です。

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

  1. 設計(インターフェースと継承)
  2. 実装とテスト
  3. ポリモーフィックな振る舞い
← C# Academyに戻る