C#のオーバーロードとは?関数と演算子のオーバーロードを徹底解説
C#におけるオーバーロードの概要
C#では、静的ポリモーフィズム(コンパイル時ポリモーフィズム)を実現するために、次の2つの手法が用意されています。
- 関数のオーバーロード(メソッドのオーバーロード)
- 演算子のオーバーロード
関数のオーバーロードとは
同じ名前でありながら、パラメータが異なる2つ以上のメソッドを定義することを、C#では「関数のオーバーロード」と呼びます。
関数のオーバーロードは、引数の個数を変更する方法と、引数のデータ型を変更する方法の2通りで実現できます。
例えば、数値の掛け算の結果を出力する関数がある場合、オーバーロードされた各メソッドは同じ名前を持ちながら、引数の数が異なります。
public static int mulDisplay(int one, int two) { }
public static int mulDisplay(int one, int two, int three) { }
public static int mulDisplay(int one, int two, int three, int four) { }サンプルコード
以下は、関数のオーバーロードを実装する具体例です。
using System;
public class Demo {
public static int mulDisplay(int one, int two) {
return one * two;
}
public static int mulDisplay(int one, int two, int three) {
return one * two * three;
}
public static int mulDisplay(int one, int two, int three, int four) {
return one * two * three * four;
}
}
public class Program {
public static void Main() {
Console.WriteLine("2つの数値の掛け算: " + Demo.mulDisplay(10, 15));
Console.WriteLine("3つの数値の掛け算: " + Demo.mulDisplay(8, 13, 20));
Console.WriteLine("4つの数値の掛け算: " + Demo.mulDisplay(3, 7, 10, 7));
}
}実行結果
2つの数値の掛け算: 150 3つの数値の掛け算: 2080 4つの数値の掛け算: 1470
演算子のオーバーロードとは
オーバーロードされた演算子とは、特別な名前を持つ関数のことです。キーワード operator の後に、定義したい演算子の記号を続けて記述します。
以下の表は、C#でオーバーロードできる演算子とできない演算子をまとめたものです。
| 番号 | 演算子と説明 |
|---|---|
| 1 | +、-、!、~、++、-- これらの単項演算子は1つのオペランドを取り、オーバーロードが可能です。 |
| 2 | +、-、*、/、% これらの二項演算子は2つのオペランドを取り、オーバーロードが可能です。 |
| 3 | ==、!=、<、>、<=、>= 比較演算子はオーバーロードが可能です。 |
| 4 | &&、|| 条件論理演算子は直接オーバーロードできません。 |
| 5 | +=、-=、*=、/=、%= 代入演算子はオーバーロードできません。 |
| 6 | =、.、?:、->、new、is、sizeof、typeof これらの演算子はオーバーロードできません。 |
-
C#の列挙型(Enum)とは?基本的な使い方をサンプルコード付きで解説
C#における列挙型(Enum:Enumeration)は、曜日、月、季節、製品カテゴリなど、関連する一連の名前付き定数をひとつのグループとして格納するためのデータ型です。Enumの定数にはデフォルトで0から始まる整数値が自動的に割り当てられ、宣言された順番に1ずつ増加していきます。定数のセットは固定されており、ループ処理などで簡単に走査(トラバース)できるのも大きな特徴です。Enumの基本的な特徴関連する名前付き定数をひとまとめに管理できる最初の定数にはデフォルトで「0」が割り当てられ、以降は1ずつ増加する値は明示的に変更することも可能型安全性が高く、無効な値の代入をコンパイル時に防げるEnu
-
Javaにおけるメソッドのオーバーロード(静的ポリモーフィズム)の基本と実装例
メソッドのオーバーロードは、静的ポリモーフィズム(静的多態性)の一種です。Javaでは、同じ名前を持つ複数のメソッドを、引数の数や型が異なる形で定義することができます。これにより、呼び出し側は同じメソッド名を使いながら、渡す引数に応じて適切な処理が自動的に選択されます。以下に、実際のサンプルプログラムを示します。サンプルコードpublic class Tester { public static void main(String args[]) { Tester tester = new Tester(); System.out.println(test