導入
Console.WriteLineは文字列でも数値でも渡せます。これは同じ名前で引数の異なるメソッドを複数定義できる仕組み——オーバーロード——のおかげです。
図解
flowchart TB
N["名前は同じ Show"] --> A["Show(int)<br/>整数用"]
N --> B["Show(string)<br/>文字列用"]
N --> C["Show(int, int)<br/>2つの整数用"]
CALL["Show(5)"] -.->|引数の型で自動選択| A
サンプル
Show(42); // 整数版が呼ばれる
Show("hello"); // 文字列版が呼ばれる
Show(3, 4); // 2引数版が呼ばれる
void Show(int n)
{
Console.WriteLine($"整数: {n}");
}
void Show(string s)
{
Console.WriteLine($"文字列: {s}");
}
void Show(int a, int b)
{
Console.WriteLine($"2つ: {a}, {b}");
}
// 整数: 42 / 文字列: hello / 2つ: 3, 4
- 同じ名前でも、引数の型や個数が違えば複数定義できる
- 呼び出し時、渡した引数に応じてコンパイラが正しい版を選ぶ
- 「本質的に同じ操作を、いろいろな入力で提供したい」ときに使う
演習
// TODO: Combine を2つオーバーロード定義してください。
// ・Combine(string, string) → 2つを "-" でつなぐ
// ・Combine(int, int) → 2つを足す
// Combine("A", "B") と Combine(2, 3) を出力してください(A-B と 5)
___
- 期待される出力:
A-B5(2行)
ヒント1を見る
string Combine(string a, string b) => $"{a}-{b}"; と int Combine(int a, int b) => a + b;
ヒント2を見る
Console.WriteLine(Combine("A", "B")); Console.WriteLine(Combine(2, 3)); string Combine(string a, string b) => $"{a}-{b}"; int Combine(int a, int b) => a + b;
まとめ
- オーバーロードは「同名・引数違い」のメソッドを複数定義する
- 引数の型・個数で呼ばれる版が自動的に選ばれる
- 同じ操作を多様な入力に提供したいときに使う
次回: メソッドを短く書く「式本体」とローカル関数です。