本文へスキップ
BecomeCoder

C#文法コース · 第4章 メソッド · レッスン34

オーバーロード

ブラウザで完結

導入

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-B 5(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;

まとめ

  • オーバーロードは「同名・引数違い」のメソッドを複数定義する
  • 引数の型・個数で呼ばれる版が自動的に選ばれる
  • 同じ操作を多様な入力に提供したいときに使う

次回: メソッドを短く書く「式本体」とローカル関数です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。