スポンサーリンク
※サイト運営にサーバーは必須です※
~ ロリポップ! はコスパのよい初心者向けサーバーです~
目次
オーバーロードとは?
オーバーロードとは、「戻り値や引数は異なるが、名前は同じメソッドを複数定義する」ことを意味します。
※オーバーロードを日本語に訳すとするなら「多重定義」です
オーバーロードの簡単な例
ConsoleクラスのWriteLineメソッドは、オーバーロードされています。
※上のようなコードを見たい場合は、まず、Visual Studio上で、Console.WriteLineと書いてカーソルをあてます。そのまま「F12」を押すと定義に移動します。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OverLoad02 { class Program { static void Main(string[] args) { Console.WriteLine("test");//WriteLine(string value); Console.WriteLine(12);//WriteLine(int value); Console.WriteLine(3.45);//WriteLine(double value); } } } |
実行結果
test
12
3.45
WriteLineメソッドの引数がstring型だった場合、
WriteLine(string value);
が使用されます。
一方で、引数がint型だった場合、
WriteLine(int value);
が使用されます。
もしもオーバーロードがなかったら?
もしもオーバーロードがなかったら、引数だけが異なり内容が同じメソッドに対して、それぞれ別の名称を割り振る必要が出てきます。
例えば、string型をコンソールに出力するメソッドにWriteLineという名称を割り振ったとします。
その後、int型をコンソールに出力するメソッドとして作りたくなったとします。
この時、オーバーロードがなければ、WriteLine01などの異なる名前を付けないといけません。
されにその後、double型のメソッドとして作りたくなったら、新たにWriteLine02といったような異なるメソッド名を用意しないといけません。
こうなると、機能は同じなのに、異なる名前で管理されて、非常に不便になります。
オーバーロードの使い方
オーバーロードをより使いこなすにあたって、以下の2点を押さえてください。
・引数の組み合わせが同じであるが、戻り値が異なる場合、オーバーロードはできない
・引数の型の順番が異なる場合、オーバーロードできる
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OverLoad03 { class Program { static void Main(string[] args) { Personal(25, "トニー"); Personal("ボブ", 17); } static void Personal(int age, string name) { Console.WriteLine($"年齢:{age} 名前:{name}"); } static void Personal(string name, int age) { Console.WriteLine($"名前:{name} 年齢:{age}"); } //戻り値だけが異なるメソッドはオーバーロードできない //static string Personal(string name, int age) //{ // return $"名前:{name} 年齢:{age}"; //} } } |
実行結果
年齢:25 名前:トニー
名前:ボブ 年齢:17
関連記事
~ギャンブルに絶対儲かる必勝法があるのだろうか?~
私(サイト主)はこの疑問に対して非常に興味を持ち、プログラミングで検証してみました。
このサイトを応援してもいいかなと思う人はぜひとも購入を検討してみてください。