C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#の遅延バインディング(レイトバインディング)とは?動的ポリモーフィズムの仕組みを解説

静的ポリモーフィズム(静的結合)では、関数呼び出しへの応答はコンパイル時に決定されます。一方、動的ポリモーフィズムでは、その決定が実行時(ランタイム)に行われます。この実行時にメソッドが確定する仕組みこそが、遅延バインディング(レイトバインディング)と呼ばれるものです。

C#では、遅延バインディングは抽象クラスや仮想関数(virtual メソッド)、そして override キーワードによるオーバーライドによって実現されます。

静的ポリモーフィズムと動的ポリモーフィズムの違い

  • 静的ポリモーフィズム: メソッドのオーバーロードなどが代表例で、どのメソッドが呼ばれるかはコンパイル時に確定します。
  • 動的ポリモーフィズム: 仮想メソッドのオーバーライドが代表例で、実際に呼び出されるメソッドは実行時にオブジェクトの型に基づいて決まります。

次のサンプルコードは、動的ポリモーフィズム(遅延バインディング)の動作を示したものです。

サンプルコード

using System;

namespace PolymorphismApplication {
    class Shape {
        protected int width, height;

        public Shape( int a = 0, int b = 0) {
            width = a;
            height = b;
        }

        public virtual int area() {
            Console.WriteLine("Parent class area :");
            return 0;
        }
    }

    class Rectangle: Shape {
        public Rectangle( int a = 0, int b = 0): base(a, b) {}
        public override int area () {
            Console.WriteLine("Rectangle class area :");
            return (width * height);
        }
    }

    class Triangle: Shape {
        public Triangle(int a = 0, int b = 0): base(a, b) {}
        public override int area() {
            Console.WriteLine("Triangle class area :");
            return (width * height / 2);
        }
    }

    class Caller {
        public void CallArea(Shape sh) {
            int a;
            a = sh.area();
            Console.WriteLine("Area: {0}", a);
        }
    }

    class Tester {
        static void Main(string[] args) {
            Caller c = new Caller();
            Rectangle r = new Rectangle(10, 7);
            Triangle t = new Triangle(10, 5);
            c.CallArea(r);
            c.CallArea(t);
            Console.ReadKey();
        }
    }
}

実行結果

Rectangle class area :
Area: 70
Triangle class area :
Area: 25

コードの解説

このプログラムのポイントは以下の通りです。

  • 基底クラス Shapearea() メソッドには virtual キーワードが付いており、派生クラスでのオーバーライドを許可しています。
  • Rectangle クラスと Triangle クラスはそれぞれ area()override して独自の面積計算を実装しています。
  • Caller クラスの CallArea() メソッドは、引数として基底クラス型の Shape を受け取ります。

CallArea() に渡されるのが Rectangle のインスタンスであれば矩形の面積計算が、Triangle のインスタンスであれば三角形の面積計算が実行されます。つまり、どの area() が呼び出されるかは、コンパイル時ではなく実行時に渡されたオブジェクトの実際の型によって決まるのです。これが遅延バインディングの本質です。

  1. IPアドレスとは?仕組み・種類・確認方法をわかりやすく解説

    IPアドレス(Internet Protocol address)とは、ネットワークに接続された機器を識別するための番号のことです。IPアドレスを持つことで、デバイスはインターネットに代表されるIPベースのネットワーク上で、他のデバイスと通信できるようになります。 IPアドレスの見た目 一般的なIPアドレスは、次のような形式で表記されます。 151.101.65.121 また、次のようにアルファベットを含む形式のIPアドレスを目にすることもあります。 2001:4860:4860::8844 IPアドレスの役割と仕組み IPアドレスは、インターネット上のネットワーク機器に対して「身元」を与える

  2. Windows 11 SEとは?教育向けOSの特徴・入手方法・対応アプリを徹底解説

    ChromebookとChrome OSが教育市場を大きく席巻する中、Microsoftは長年にわたりこの分野への本格参入を模索してきました。その切り札となるのが「Windows 11 SE」です。このOSはK-8(幼稚園〜中学校段階)の教室を想定して設計されており、使いやすさ、高いセキュリティ、そして低価格ながら性能が限られたPCへの適合性を重視しています。開発にあたってMicrosoftは、教育者、学校のIT担当者、管理者と緊密に連携しました。 Windows 11 SEは、同OS専用に設計された特別なデバイス上で動作することを前提としています。その代表格が、249ドルから提供されるMi