JScript でのメソッドのオーバーロード

更新 : 2007 年 11 月

クラスの 2 つ以上の JScript メンバ (関数またはプロパティ) が同じ名前を持つ一方でそのシグネチャが異なる場合、そのメンバは "オーバーロードされた" 関数 (プロパティ) と呼ばれます。関数の "シグネチャ" は、受け取るパラメータの数、型、および順序に基づきます。2 つの関数が同じ型の引数を同じ数だけ同じ順序で受け取る場合、それらは同じシグネチャを持つことになります。関数が同じ型の引数を異なる順序で受け取る場合や、異なる数または型の引数を受け取る場合、関数のシグネチャは異なります (引数の名前はシグネチャとは関係ありません)。静的関数はオーバーロードの対象となりますが、戻り値の型と同様に、メソッドの静的ステータスはシグネチャに影響を与えません。したがって、インスタンス メソッドと同じ名前を持つ静的メソッドは、異なるパラメータ リストを持つ必要があります。

処理ロジック

オーバーロードされた関数が呼び出されると、関数に渡される引数の実際の型に応じて、渡された引数とその引数が最も一致するオーバーロードされた関数が呼び出されます。引数の型が特定のオーバーロードに正確に一致する場合は、そのオーバーロードが呼び出されます。引数の型がいずれのオーバーロードにも正確に一致しない場合、呼び出されるオーバーロードは消去法によって決定されます。この消去法においては、利用できるオーバーロードの型に実際の型をどれだけ簡単に変換できるかが基準となります。詳細については、「JScript における型の強制変換」を参照してください。この例の MethodOverload クラスには、Greetings という名前のオーバーロードされたメソッドが 3 つあります。1 番目のオーバーロードはパラメータを受け取りません。2 番目のオーバーロードは String 型のパラメータを 1 つ受け取ります。3 番目のオーバーロードは、String 型と int 型の 2 つのパラメータを受け取ります。

var methodOverload = new MethodOverload();
methodOverload.Greetings();
methodOverload.Greetings("Mr. Brown");
methodOverload.Greetings(97, "Mr. Brown");

class MethodOverload
{
   function Greetings()
   {
     print("Hello, and welcome!");
   }
   function Greetings(name : String)
   {
     print("Hello, " + name + "!");
   }
   function Greetings(ticket : int, name : String)
   {
     print("Hello, " + name + "! Your ticket number is " + ticket + ".");
   }
}

このプログラムの出力は次のようになります。

Hello, and welcome!
Hello, Mr.Brown!
Hello, Mr.Brown! Your ticket number is 97.

参照

その他の技術情報

JScript 言語の紹介

JScript のデータ型