ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

コンストラクタとデストラクタ

みなさんこんばんは

給料日を迎えて少しウキウキしているブルーノです。しかしお金を貯めても使うのがもったいなくて結局ご飯くらいしか高いものを買えない貧乏性なのです(笑)さて今回は少し特殊なコンストラクタとデストラクタというメソッドについてやっていきます。

 

コンストラクタとは?

コンストラクタとは、インスタンスフィールドの初期値を設定したり、そのほかのものの初期設定をするためのものです。全てのクラスはコンストラクタ(constructor)というメソッドを持っています。ん?今までそんなメソッド定義した覚えないぞ?どうやら自分でコンストラクタを書かない場合、引数を取らないコンストラクタが自動で作成されているそうです。この自動で作成されているコンストラクタをデフォルトコンストラクタと言います。コンストラクタには以下の特徴があります。

・戻り値はなし(voidという意味ではない)

・クラスと同じ名前になる

・パラメータ(引数)を持つことができる(自分で書く場合は)

オーバーロードができる

・オブジェクトが生成されると同時に勝手に呼び出される

 4番目の中二感溢れるかっこいい名前のは後で書きます。

単純な例を書いてインスタンスフィールドの初期設定をしてみます

f:id:covory10101101276:20170525000519p:plain

f:id:covory10101101276:20170525000529p:plain

24行目でshowxメソッドしか呼び出していないのに実行時にコンストラクタ部分が呼び出されていますね。これは23行目でオブジェクトを生成した時に自動でコンストラクタが呼び出され、xに10を代入しその旨を伝えたからなのです。このようにクラス内で生成した変数の初期設定をするのに主に使われるようです。では次に先ほどでたオーバーロードについて説明します。

 

オーバーロードとは?

とってもかっこいいですよね。オーバーロードオーバーロードとは、その引数のデータ型や数が違う同名のメソッドを定義することです。ん?どういうこと?ちょっと言葉じゃ難しいですね。実際に作ってみます。

f:id:covory10101101276:20170525230312p:plain

f:id:covory10101101276:20170525230318p:plain

f:id:covory10101101276:20170525230323p:plain

19, 27, 35行目において同じ名前のコンストラクタを3つ定義しています。これらの違いは引数の組み合わせで、渡す引数によってどのコンストラクタが呼び出されるかが変わるわけです。この引数とメソッドの名前の組み合わせをシグニチャと呼びます

ちなみに13,14行目の〇〇◯.ToStringとはその前のデータを文字列(string型)に変換するメソッドです。

このように同じ名前のメソッドを多重に定義することをオーバーロードと言います。そして最後にデストラクタについて説明します。

 

デストラクタとは?

new演算子の役割はオブジェクトを生成することだと前回説明しました。オブジェクトを生成するにはメモリ容量の空きが必要です。C#では、不要になったオブジェクトのメモリ容量を自動的に解放する機能がついています。この機能をガベージコレクションというのですが、ガベージコレクションが行われる前にデストラクタというメソッドが実行されます。これはコンストラクタと同じように定義しなければデフォルトコンストラクタが自動で実行されます。メソッドではありますが他の普通のものに比べてパラメータリスト(引数)はありませんし戻り値もありません。普通の言語では生成したオブジェクトの後始末をこのデストラクタで色々書くようですがC#にはガベージコレクションがあるのであまり使われることはありません。短い説明になってしまいましたがこんな感じです。

 

いかがでしたでしょうか。インスタンス変数を初期化する目的で主に使われるコンストラクタ、そして呼び出し元が渡す引数によって初期設定を変更できるオーバーロードについて今回はやりました。だんだん難しくなってきました。外では雨続きで楽しみのテニスもできない分こっちに専念したいと思います。