【オブジェクト指向】オーバーロードとは?【C#】

C#

今回は新米C#er必見オーバーロードの話し。

スポンサーリンク

オーバーロードとは?

 

オーバーロードとは、「引数や戻り値が異なるが名称が同一のメソッドを複数定義する」というオブジェクト指向プログラミングのテクニックである。

引用元 Weblio

要は同じ名前のメソッドだけど違う引数で定義することを言います。

例えば既存のプロジェクトで長年いろんな箇所から参照されているメソッドXがあるとして、
新しく書いた所でメソッドXを使いたい! …けどどうしても一か所だけ違う動きをさせたい!みたいな時に、全ての呼び元への影響を考えると中々変更は難しいですよね?

でもこれを使えば呼び元へ一切影響を与えずに同じメソッドを流用する事が出来ます。

そう、オーバーロードならね。

実用例

 

Baigaeshi

    ///////////////////////////////////////////////////////////
    //  概要:数値を渡して10倍返しして貰う                     
    //  はまみ:2019/5/23                                      
    ///////////////////////////////////////////////////////////
    public int Baigaeshi(int nID)
    {
       return nID * 10;
    }

例えばこれを流用して100倍返しして貰いたい場合に、
nID * 100 としてしまうと既存の呼び元も全て100倍返しされちゃう。そんな時はまずBaigaeshiを少し改良します。

Baigaeshi改

    ///////////////////////////////////////////////////////////
    //  概要:数値を渡してX倍返しして貰う                      
    //  はまみ:2019/5/23                                      
    ///////////////////////////////////////////////////////////
    public int Baigaeshi_X(int nMagnification, int nID)
    {
       return nID * nMagnification;
    }

はい、倍率を引数として追加し、Method名をBaigaeshi_Xに変えました。
このままだと既存の呼び元たちが途方に暮れてしまうので、次にもう一つメソッドをつくってやります。

オーバーロード:Baigaeshi

    ///////////////////////////////////////////////////////////
    //  概要:数値を渡してX倍返しして貰う                       
    //  はまみ:2019/5/23                                      
    ///////////////////////////////////////////////////////////
    public int Baigaeshi(int nID)
    {
       return Baigaeshi_X(10, int nID);
    }

こんな感じで元のBaigaeshiと同じパラメータで作ってあげる事によって、
既存の呼び元はここにたどり着けるので今まで通り10倍返ししてもらえます。で今回やりたかった100倍返しについては以下を追加します。

オーバーロード②:Baigaeshi

    ///////////////////////////////////////////////////////////
    //  概要:数値を渡してX倍返しして貰う                       
    //  はまみ:2019/5/23                                      
    ///////////////////////////////////////////////////////////
    public int Baigaeshi(int nMagnification, int nID)
    {
       return Baigaeshi_X(nMagnification, int nID);
    }

Baigaeshi_X(100, nID)で直接呼ばずにわざわざ作ったのは、
既存のBaigaeshi_Xのアクセシビリティをpublicからprivateにしたからです。その方が全体的に綺麗だしオブジェクト指向的

おわり


便利な局面が結構あるオーバーロード。
ちなみに、引数の順番を変えるだけでもオーバーロード出来ます。C#マスターになる為には必須テクです(ᵔᴥᵔ)

コメント