- 小さな値を扱う変数にint型以外を選ぶ必要があるかについて
- byte型などはメモリ利用効率は良いが、int型への暗黙的変換でエラーの原因になることがある。(参考)
- int型は32bit、byte型は8bitで、変数が占めるメモリ領域は24bit節約できるが、最近のPCは大容量化しているので数bit節約する意義が失われつつある。また32bit のCPUで動かす場合は、int型の方が処理が早い。
- 数bitでも節約しなければいけない状況になったとき検討すれば良い。
- CPUが8bitの場合はbyet型のようなバイト長8biteの型が良い。
- プロパティについて
- 基本的な概念(参考)
- 代入演算子やインクリメント等について
- プロパティに代入演算子(+=, -=など)を使うとgetとsetが両方呼び出される(参考)
- int型のプロパティにインクリメント等(++, --)も使用可能(参考)。こちらも同様にgetとsetが両方呼び出される。
- spawn.Count = spawn.Count + 1;とやっても、結局、現在の値をgetしてから+1することになる。
- 外部で変動するような変数は、根本的にプロパティに適していない
- getとsetを両方使うことになるため、プロパティにする意味があまりない
- set{this.count += value;} などとする手もあるが、外部から見ると1を代入したはずなのにcountの値が2になっているように見えるなど、処理が分かりにくくなる
- 外部から値を変動させる変数にはプロパティは使わず、素直に値を変動させるためのメソッドを用意したほうが良い
- 下図のように自動実装プロパティに処理を持たせようとすると、エラーは出ないが実行時にフリーズする。素直に旧式の書き方に従い、privateの変数も用意する必要がある。
- 入れ子にされた内部クラスについて
- (参考)
- 配列について
- 宣言時はnew クラス名 [] を省略した短縮形も使える(参考)
- caseの末尾はセミコロンではなくコロン
- 例)case Names.Sunny:
- 継承について
- 用語(独習C#より)
- 基本クラス:継承元のクラスのこと(Javaのスーパークラス)
- 派生クラス:継承するクラス(Javaのサブクラス)
- 派生クラスは基本クラスのメンバ(変数、プロパティ、メソッド、インデクサ)をprotectedかpublicを使えば使用可能
- base.関数で機能を拡張するということは、基本クラスの関数はpublicかprotectedにする必要がある
- 派生クラスは基本クラスのprivateなメンバは使用できない
- praivateがクラス内部からしかアクセスできないのに対して、protectedは派生クラス内からもアクセス可能(参考)
- 基本クラスと派生クラスが各々独自のコンストラクターを持つ場合、基本クラスは基本クラスを初期化し、派生クラスは派生クラスを初期化する。基本クラスが必要とする引数はbaseを用いて引き渡す。
- コンストラクターは基本クラスから順に呼びだされる
- 同じ名前の変数を作ると、基本クラスではなく派生クラスの変数が呼び出される。これを隠ぺいという。またbase.メンバとすると、隠ぺいされている基本クラスのメンバを呼び出せる。
- 同名の変数やメソッドを定義した場合、新たに定義したことをコンパイラに伝えるためnewをつける
- 仮想メソッドを宣言するには、基本クラスの中でメソッド宣言前にvirtual修飾子をつける。これをオーバーライドするときは、override修飾子をつける。こうすると、派生クラス先で再定義される。
- virtual修飾子はプロパティなどにも使える。派生先でoverride修飾子をつけることで再定義できる。
- 基本クラスAとその派生クラスBがあったとする。このとき、A x = new Bはエラーとならない。このとき、クラスAに仮想メソッドM()があるとする。
- Bにてoverrideしていると、x,M()はBの処理を行う
- Bにてnewしていると、x,M()はAの処理を行う
- 根本的に、A x = new Bとする状況とは一体…。
- Unityでオーバーライドを使う時の例
- オーバーライドをする時、基本クラスと派生クラスでアクセス修飾子を変更することはできない(例えば、基本クラスのprotected virtual void Start()を、派生クラスでprivate override void Start()とすることはできない)
- > <について
- 比較演算子の>、<のこと
- HTMLコード用エスケープ(参考)
- if文でも使える。ただ、使う状況は不明なので分かり次第追記する
- クラス名の前にnew修飾子を用いる場合と、用いない場合
- 値型はnewしない、参照型はnewする(参考)
- 静的メンバーを呼び出す際はnew不要(参考)
- Vector3.upとかIPAddress.Anyとか
- staticキーワードが付いている(上記の例も、よく見るとリファレンスにstaticで定義・記載されている)
- null許容型
- 宣言時の型に?を付ける(参考)
- 中身にアクセスする際にはvalueプロパティを介する
0 件のコメント:
コメントを投稿