シロウの日記

開発した物と,C#を入門者向けに解説した記事を書いています!

C# オブジェクト指向編 オーバーロード this base part2-☆2

calendar

reload

こんにちは!シロウです!

今回はオーバーロードとthis,baseの他の使い方についてやっていきます!

オーバーロード(多重定義)

オーバーロードとは,同じメソッド名で,引数の異なるメソッドを複数宣言することです.

例えば,次のように宣言します.

 

メリット

オーバーロードのメリットとして,メソッドを呼び出すときに,呼び出し側の引数で自動的に引数に合ったメソッドが呼び出されます

例えば,上記のプログラムで,

と呼び出した時に,

が呼び出され,

 

と呼び出した時に,

が呼び出されます.

 

例として,サンプルプログラムを貼ります.

 

ソースコード

 

実行結果

 

コンストラクタ

コンストラクタもオーバーロードする事ができます.

メソッドのオーバーロードと同じです.(コンストラクタは,インスタンス生成時に自動的に呼び出されるメソッドなので.)

 

こちらも例として,サンプルプログラムを貼ります.

 

ソースコード

 

 

実行結果

 

thisとbase

コンストラクタ初期化子

thisについては,part2-2で少しだけ触れましたが,別の使い方もあります.

コンストラクタから,コンストラクタを呼び出すという使い方があります.

例えば,上記のプログラムでは,コンストラクタを引数ごとに処理を分けています.

同じ処理を何度も記述するのは少々面倒です.

コンストラクタ初期化子を使うことで,この問題は解消されます.

コンストラクタ初期化子は次のように記述します.

上記のコードのthisの部分がコンストラクタ初期化子になります.

part2-6で紹介したbaseとほぼ変わらないです.

 

こちらもサンプルプログラムを貼ります.(Programクラスは上記のものと一緒です.)

 

ソースコード

 

実行結果

 

注意してほしいのが,処理される順番です.

始めに実行される処理は,thisの方のコンストラクタからです.

その後に{}内の処理が実行されていきます.(baseの時の順序と同じです.)

 

base

baseについては,part2-6で説明しました.

前項のコンストラクタ初期化子でどういうものか思い出してもらえたと思います.

別の使い方もあるんですが,thisでやってたことがbaseでもできるって話になります.

part2-2では,thisは自分自身を指し示すキーワードと言いました.

自分自身を指すという事は,自分のクラスのメソッド,フィールド変数を指す事が出来るわけです.

baseはスーパークラスを指すキーワードなので,サブクラスからスーパークラスのメソッド,フィールド変数を指す事ができます.

どういう時に使われるかというと,オーバーライドする時に使うことが多いです.

 

こちらもサンプルプログラムを貼ります.(HumanクラスのDisplayメソッドにvirtual修飾子を付けてください.)

 

ソースコード

 

 

実行結果

 

 

今回はここまで!

次回は型推論,静的クラス,Factoryクラスを紹介します.

この記事をシェアする

コメント

コメントはありません。

down コメントを残す