[C# プログラミング入門] メソッドのオーバーロード

今回はメソッドのオーバーロードについてです。
“Hello World”をコンソールに表示した時点でオーバーロードされたメソッドを使っています。

スポンサーリンク

オーバーロードについて

簡単に言うと、メソッドが必要とするパラメーター(引数)が違う場合、メソッド名が同じでも定義ができます。

サンプルコードでよく使っている「System.Console.WriteLine」の定義を見てみます。
VisualStudioを使っている場合、Mainメソッド内に「 System.Console.WriteLine 」を書き「WriteLine」のところをクリックしてカーソルを持っていきF12ボタンを押します。

public static void WriteLine(bool value);
public static void WriteLine(char value);
public static void WriteLine(char[] buffer);
public static void WriteLine(char[] buffer, int index, int count);
public static void WriteLine(decimal value);
public static void WriteLine(double value);
public static void WriteLine(float value);
public static void WriteLine(int value);
public static void WriteLine(long value);
public static void WriteLine(object value);
public static void WriteLine(string format, object arg0);
public static void WriteLine(string format, object arg0, object arg1);
public static void WriteLine(string format, object arg0, object arg1, object arg2);
public static void WriteLine(string format, params object[] arg);
public static void WriteLine(string value);
public static void WriteLine(uint value);
public static void WriteLine(ulong value);

めっちゃオーバーロードしていますね。
オーバーロードでいろいろな型のパターンに対応しているので、引数に数値型が指定された場合でも、文字列が指定された場合でも、WriteLineメソッドを呼び出すことができるのです。

「引数が違う場合」というのは引数の型、引数の数が違うということです。
引数の型が同じで名前が違うというメソッドはオーバーロードできません。

class Program
{
    // 下の二つは引数名が違っても、引数の型が同じなのでオーバーロードできない
    static void Method(int a) { }
    static void Method(int b) {  }
}

また、戻り値もそれぞれ違う型を返すことができます。
System.Math.Max」メソッドの定義を見てみます。
このメソッドは2つの数値を受け取り大きい方の数値を返します。

public static byte Max(byte val1, byte val2);
public static decimal Max(decimal val1, decimal val2);
public static double Max(double val1, double val2);
public static float Max(float val1, float val2);
public static int Max(int val1, int val2);
public static long Max(long val1, long val2);
public static sbyte Max(sbyte val1, sbyte val2);
public static short Max(short val1, short val2);
public static uint Max(uint val1, uint val2);
public static ulong Max(ulong val1, ulong val2);
public static ushort Max(ushort val1, ushort val2);

それぞれのオーバーロードで違う型を戻り値として返しています。


C# プログラミング講座に戻る

コメント

タイトルとURLをコピーしました