C#のコンパイル時ポリモーフィズムとは?静的バインディングの仕組みとオーバーロードの実装例
ポリモーフィズムの種類:静的と動的
ポリモーフィズム(多態性)は、大きく分けて「静的ポリモーフィズム」と「動的ポリモーフィズム」の2種類があります。
静的ポリモーフィズムでは、関数呼び出しへの応答がコンパイル時に決定されます。一方、動的ポリモーフィズムでは、実行時に決定されます。
コンパイル時に関数とオブジェクトを結び付けることを「早期バインディング(early binding)」と呼びます。これは「静的バインディング」とも呼ばれます。
C#で静的ポリモーフィズムを実現する2つの手法
C#では、以下の2つの技法を使って静的ポリモーフィズムを実装できます。
- 関数のオーバーロード(Function Overloading)
- 演算子のオーバーロード(Operator Overloading)
関数のオーバーロードとは
関数のオーバーロードでは、同じスコープ内で同名の関数に対して複数の定義を持たせることができます。ただし、各定義は引数リスト内の引数の型や引数の数が互いに異なっている必要があります。
関数オーバーロードの実装例
以下は、C#で関数のオーバーロードを実装するサンプルコードです。
例
using System;
namespace PolymorphismApplication {
class Printdata {
void print(int i) {
Console.WriteLine("Printing int: {0}", i);
}
void print(double f) {
Console.WriteLine("Printing float: {0}", f);
}
void print(string s) {
Console.WriteLine("Printing string: {0}", s);
}
static void Main(string[] args) {
Printdata p = new Printdata();
// 整数を出力するprintを呼び出し
p.print(5);
// 浮動小数点数を出力するprintを呼び出し
p.print(500.263);
// 文字列を出力するprintを呼び出し
p.print("Hello C++");
Console.ReadKey();
}
}
}このプログラムでは、printメソッドがint型・double型・string型の3つの異なるシグネチャで定義されています。呼び出し時に渡される引数の型に基づいて、コンパイラが適切なメソッドを自動的に選択します。
出力結果
Printing int: 5 Printing float: 500.263 Printing string: Hello C++
このように、同じメソッド名でも引数の型や数が異なれば、それぞれ別の処理を定義できるのが関数オーバーロードの強みです。コードの可読性と再利用性を高めるために、ぜひ活用してみてください。
-
C#の動的ポリモーフィズムとは?仕組みと実装例をわかりやすく解説
オブジェクト指向プログラミングにおけるポリモーフィズム(多態性)は、大きく分けて「静的(スタティック)」と「動的(ダイナミック)」の2種類があります。 静的ポリモーフィズム:関数呼び出しへの応答がコンパイル時に決定されます。メソッドのオーバーロードなどが代表例です。 動的ポリモーフィズム:関数呼び出しへの応答が実行時(ランタイム)に決定されます。 C#では、抽象クラスや基底クラスの仮想関数(virtualメソッド)と、それを派生クラスでオーバーライドする仕組みによって、動的ポリモーフィズムを実現します。これにより、同じインターフェースを持つ異なるオブジェクトに対して、実際の型に応じた適切な
-
Pythonのprint()関数とは?役割と基本的な使い方をわかりやすく解説
Python 3において、print()は組み込み関数の一つで、引数として渡された値を画面(標準出力)に表示するために使われます。プログラミング初心者が最初に学ぶ関数でもあり、デバッグや動作確認にも欠かせない存在です。print()関数の基本的な使い方>>> print("Hello!") Hello! >>> print(5) 5このように、文字列や数値など、さまざまな型のオブジェクトをそのまま渡すだけで出力できます。Python 2以前との違い:文から関数へ実は、Python 2以前ではprintは「関数」ではなく「ステートメント(文