メソッドのオーバーローディング
メニューを表示するにはスワイプしてください
C#におけるメソッドのオーバーロードは、同じ名前のメソッドをクラス内で複数定義できる機能であり、パラメーターの型や数、またはその両方が異なる場合に利用される。これにより、さまざまな入力シナリオに柔軟かつ簡潔に対応可能。
例えば、同じ名前で異なるパラメーター数を持つ2つのメソッドを定義できる:
index.cs
12345678910111213141516171819using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static int sum(int a, int b, int c) { return a + b + c; } static void Main() { Console.WriteLine(sum(5, 7)); Console.WriteLine(sum(5, 7, 9)); } }
上記のコードでは、sumメソッドがパラメーターのバリエーションを持つ形でオーバーロードされている。メソッドは異なるバリエーションごとに異なる戻り値の型を持つことも可能だが、曖昧さがないことが重要であり、そうでない場合はコンパイラーがエラーを表示する。なぜなら、コンパイラーが同じ名前の2つのメソッドを区別する主な方法はパラメーターリストであるため。
例:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int a, int b) { return a + b; }
上記のコードは誤りです。なぜなら、パラメーターが元のメソッドと全く同じであり、戻り値の型だけが異なっているためです。これは許可されていません。なぜなら、メソッドが呼び出された際に、コンパイラや人間がどちらを実行すべきか判断できなくなるためです。
index.cs
123sum(1, 3); // Should it execute `int sum(int a, int b)` or `long sum(int a, int b)` ? // It is impossible to reach a good answer for the compiler in this case so it shows an error
このため、メソッドのオーバーロード時には、戻り値の型が異なる場合でも、パラメーターのセットも異なる必要があり、識別しやすく曖昧さを排除できます。次の例も誤りです。
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int first, int second) { return first + second; }
これは、パラメーター名は重要ではなく、型が重要であるためです。次のオーバーロードのケースは有効です。
index.cs
1234567891011121314151617181920212223242526using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static long sum(long a, long b) { return a + b; } static string sum(int a, long b, float c) { return Convert.ToString(a + b + c); } static void Main() { Console.WriteLine(sum(5, 7)); // Calls 'int sum()' Console.WriteLine(sum(500000000000, 700000000000)); // Calls 'long sum()' Console.WriteLine(sum(5, 7, 9)); // Calls 'string sum()' } }
1. コンパイラはどのようにしてオーバーロードされたメソッドを区別しますか?
2. 次のうち、メソッドのオーバーロードの有効な例はどれですか?
すべて明確でしたか?
フィードバックありがとうございます!
セクション 4. 章 7
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 4. 章 7