Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ メソッドのオーバーローディング | OOPの基本
C#オブジェクト指向構造

bookメソッドのオーバーローディング

メニューを表示するにはスワイプしてください

C#におけるメソッドのオーバーロードは、同じ名前のメソッドをクラス内で複数定義できる機能であり、パラメーターの型や数、またはその両方が異なる場合に利用される。これにより、さまざまな入力シナリオに柔軟かつ簡潔に対応可能。

例えば、同じ名前で異なるパラメーター数を持つ2つのメソッドを定義できる:

index.cs

index.cs

copy
12345678910111213141516171819
using 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

index.cs

copy
12345678910
static 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

index.cs

copy
123
sum(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

index.cs

copy
12345678910
static 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

index.cs

copy
1234567891011121314151617181920212223242526
using 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. 次のうち、メソッドのオーバーロードの有効な例はどれですか?

question mark

コンパイラはどのようにしてオーバーロードされたメソッドを区別しますか?

正しい答えを選んでください

question mark

次のうち、メソッドのオーバーロードの有効な例はどれですか?

すべての正しい答えを選択

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 4.  7

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 4.  7
some-alt