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

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

構造体2

f:id:covory10101101276:20171026103218j:image

みなさんこんにちは🌚

 台風の土日をずっと家で引きこもっていたブルーノです。珍しくずっと家で寝てたなー。あんまり気分が上がらなかったからか。さて前回、構造体とはどんなものかを大まかにやりました。そのまとめは容量の少ないクラスなら構造体にした方が素早くアクセスでき、効率的、というものでした。ではクラスを作成した時に「これなら構造体にした方が良くないか?」と思うことができるように、クラスでも構造体でもできることについて微妙な違いも一緒にまとめたいと思います。

 

静的メンバ

構造体も静的メンバを扱うことができます。静的メンバは各インスタンス間で共有できる変わらない値をクラス内で扱う際、インスタンス化せずにいきなりアクセスできるメンバのことですね(この説明では不十分かもしれませんが...)。

f:id:covory10101101276:20171030143750p:imagef:id:covory10101101276:20171030143753p:image

上の画像にあるようにBruno055構造体のメンバに全てstaticキーワードが付いており、それ故にBruno056クラスではBruno055構造体をインスタンス化せずに直接メンバを呼び出しています。

 

コンストラクタを持つ構造体

構造体もまた、newキーワードでインスタンス化するとコンストラクタが呼び出されます。自作のコンストラクタがない場合はデフォルトコンストラクタが呼び出されますが、構造体の自作のコンストラクタを呼び出す場合はパラメータリスト(引数)が必要になります。下に例を示します。

f:id:covory10101101276:20171030165530p:imagef:id:covory10101101276:20171030165533p:image

この中で特筆すべき点は主に2点あり、一つがまず7行目のBruno057構造体の自作コンストラクタで、パラメータリストを用意しています。ここに何も入っていないとエラーとなります。

そしてもう一つが17行目で、Bruno057構造体をインスタンス化する際に引数を入力していませんがエラーになりません。この場合インスタンスは0で初期化されることを覚えておきましょう。引数は必要だが呼び出す際に引数はなくても良い。中々便利なのかめんどくさいのか分からないです。

 

インターフェイスの実装

構造体でも、newキーワードを使ってインスタンス化すればインターフェイスを実装できます。

f:id:covory10101101276:20171031055451p:plain

f:id:covory10101101276:20171031055458p:plain

ちゃんとBruno060クラスがBruno059インターフェイスを実装できていますね 。あと、36行めでもしnewキーワードを使わずに

Bruno060 b;

とだけ宣言した場合はエラーとなってしまいます。今回はこのあたりにしておきます。

 

最近新しく知ったBURNOUT SYNDROMESというアーティストにはまっています。そこから芋づる式にハイスコアガールという漫画も知って一気買いしてしまいました。なんか版権とかがいろいろ大変みたいですが続きが読みたいですね😑😑