変数やメソッドのスコープは 一番狭く、使う時に広げてね。
というのが私のいつもの方針である。賛否あるかもだけど、今回はその方針の元書きます。
C#の話がほとんどですが、Unityだとインスペクタに表示するかどうかも関係してくるのでまとめた。
メンバ変数のスコープをなるべく狭くする定義の仕方まとめ
なるべく用途が狭い順に書く。
以下のimport文がある前提なので注意。
using UnityEngine; using System
# | 使う範囲 | インスペクタ | get | set | 定義方法 |
---|---|---|---|---|---|
1 | 自クラスのみ | 非表示 | ○ | ○ | private int hoge; |
2 | 自クラスのみ | 表示される | ○ | ○ | [SerializeField] private int hoge; |
3 | 子クラスのみ | 非表示 | × | ○ | protected int hoge{ get; private set; } |
4 | 子クラスのみ | 非表示 | ○ | × | protected int hoge{ private get; set; } |
5 | 子クラスのみ | 非表示 | ○ | ○ | protected int hoge; |
6 | 全クラス | 非表示 | × | ○ | public int hoge{ get; private set; } |
7 | 全クラス | 非表示 | ○ | × | public int hoge { private get; set; } |
8 | 全クラス | 非表示 | ○ | ○ | [NonSerialized] public int hoge; |
9 | 全クラス | 表示される | ○ | ○ | public int hoge; |
以下、答えが出てない考察・・・
getのみさせたい場合の書き方
public int speed { get; private set; }
いつも↑を使っているけど、↓こういう風に書く人もいる。。今のところ違いが分かっていないけど、好み?
private int hoge; public int Hoge=> hoge;