メソッドのオーバーロードは簡単です。同じ名前で、引数の型とか、個数を変えればよいわけです。
簡単な例を見てみましょう。
// overload01.cs using System; class Sq { public static int sq(int x) { Console.WriteLine("intバージョンが呼ばれました"); return x * x; } public static double sq(double x) { Console.WriteLine("doubleバージョンが呼ばれました"); return x * x; } } class overload01 { public static void Main() { Console.WriteLine("{0}の2乗は{1}です", 5, Sq.sq(5)); Console.WriteLine("{0}の2乗は{1}です", 0.5, Sq.sq(0.5)); } }Sqクラスには2つのsqメソッドがあります。一つはint型の引数を1つ持ち、もう一つはdouble型の引数を1つ持っているメソッドです。シグニチャが異なるのでオーバーロード できます。
実行結果は、次のようになります。
引数の型の違いにより、呼ばれるメソッドのバージョンが異なることがわかります。
オーバーロードされたメソッドは今までも何回も使ってきました。Console.WriteLineメソッドが代表的ですね。
次も簡単な例です。引数の個数が異なるオーバーロードの例です。
// overload02.cs using System; class MyClass { public int add(int x) { return x; } public int add(int x, int y) { return x + y; } public int add(int x, int y, int z) { return x + y + z; } } class overload02 { public static void Main() { MyClass mc = new MyClass(); Console.WriteLine("{0} = {1}", 10, mc.add(10)); Console.WriteLine("{0} + {1} = {2}", 10, 20, mc.add(10, 20)); Console.WriteLine("{0} + {1} + {2} = {3}", 10, 20, 30, mc.add(10, 20, 30)); } }実行結果は、次のようになります。
これは、簡単ですね。
ところでもっとたくさんの 引数をもつ(何個有るかわからない)addメソッドを作るにはどうしたらよいのでしょうか。 何百個、何千個ものオーバーロードメソッドを用意しなくてはならないのでしょうか?
Update 31/Aug/2006 By Y.Kumei