C#の勉強記録その2
引き続きC#で勉強したことをメモって行く
アクセス修飾子
アクセス修飾子は変数とかの前に書く
- public
- protected
- private
とかのやつ。この3つだけ紹介されたけど他にもあるんやろか。
publicはどのクラスからでも使えるやつ。
名前空間さえ同じなら違うクラスからでも変更できるし、
publicで定義されたメソッドなら別クラスから使える。
protectedは定義したクラスと、それを継承したクラスでなら使えるやつ。
全然関係ないクラスでインスタンスを生成して、protectedで定義された変数を使おうとしたらエラーになる。
クラス筋肉->protectedで変数muscleを定義したとする。
クラス血管->筋肉を継承した
クラス骨->筋肉を継承しない
//後日修正:血管クラスからインスタンス「大動脈」を生成した場合、//
血管クラス内でクラス筋肉を基にインスタンス「大動脈」を生成した場合、
こいつはmuscleを参照できるし変更もできる。
//後日修正:骨クラスからインスタンス「鎖骨」を生成した場合、//
骨クラス内でクラス筋肉を基にインスタンス「鎖骨」を生成した場合、
鎖骨から変数muscleを参照したり変更したりはできない。
privateは他の一切のクラスから使用できない。
上の例でいうと大動脈も鎖骨も変数muscleは参照・変更できない。
筋トレに例えたら分かりやすいかと思ったけど筋トレでもないし分かりやすくもなかったわ
プロパティ
上記のアクセス修飾子に関係する。
別のクラスでいじられるのは基本的に嫌だけど、特定のクラスでは例外的にいじっていいよみたいなときに使う。ちょっと書き方のルールが不思議。
さっきの例で書く。
筋肉クラス内のmuscle変数を鎖骨インスタンスでも参照できるようにしたいとする。※理由は不明
筋肉クラス内では最初はこんな感じで記載してるはず
class 筋肉{
private string muscle;
}
これを
class 筋肉{
private string muscle;
public string Muscle{
get { return this.name; }
set { this.name = value;}
}
こう。
何をしたかっていうとpublicでアクセスしていい変数を作る
この変数はmuscleのプロパティとして使いたいのでなのでMuscleとして関連を分かりやすくする(別に全然違う名前で定義してもいい)
変数だけど{}をつけてプロパティを記載できるようにする
get{}に外部が変数を参照しようとしてきたときのプロパティを書く
set{}に外部が変数に値を代入しようとしてきたときのプロパティを書く
※個人的に「外部が」主語になっているのがポイントだと思った
これで外部からmuscleをいじりたいときは、生成したインスタンスのMuscleを参照・編集すればよいことになった。ちなみに全然関係ない名前でプロパティを記載した場合(仮にGohhoとしよう)は、生成したインスタンスからGohhoを参照・編集すれば別に問題ない。
プロパティっていうと大げさな名前だけど、「privateの変数にアクセスするために別の入口になる変数作ったろか」という話なんだねオッケーという理解。違う書き方もできるけど僕はこっちのが分かりやすいのでこれで生きていく
インデクサ
これ使いどころがよく分からなかったんだけど、生成したインスタンス自体が配列みたいになるというか…
さっきのプロパティを配列に対して作ったバージョンて感じ。
class 筋肉{
private string[] muscles = new string[3]
public string this[int i]{
get { return this.muscles[i]; }
set { this.muscles[i] = value;}
}
}
こうしておいて、クラス筋肉から大胸筋インスタンスを作ったとする。
すると大胸筋[0], 大胸筋[1], 大胸筋[2]というようにインスタンス自体が配列みたいに使える。
大胸筋インスタンスがいくつもできるのではなく、一つのインスタンスに格納領域が複数できるという感じ。
あらかじめ[0]には筋肉量を入れる、[1]には筋力を入れる、[3]には重さを入れる、みたいにしておくか、
「野球部」ってクラスにインデクサを持たせておいて
野球部[0]=智辯和歌山
野球部[1]=帝京学園
みたいに使うって感じ?ちなみに僕は野球は好きじゃない。
なんか使いどころは分からん。
今日はここまで!