第25章 メソッドのオーバーロード


メソッドの名前と引数をメソッドのシグニチャといいます。シグニチャが 異なれば、同じクラスに複数のメソッドが存在可能です。これをメソッドの オーバーロードといいます。コンストラクタも 同一の名前なのに、引数が異なれば複数存在できましたね。



メソッドのオーバーロードは簡単です。同じ名前で、引数の型とか、個数を変えればよいわけです。

簡単な例を見てみましょう。

// 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メソッドを作るにはどうしたらよいのでしょうか。 何百個、何千個ものオーバーロードメソッドを用意しなくてはならないのでしょうか?



[C# Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 31/Aug/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。