導入
クラスのメソッドは、自分自身のデータを操作します。「自分自身」を明示的に指すのがthisです。オブジェクトの状態を変える振る舞いを書けるようになります。
図解
flowchart LR
O["counter オブジェクト<br/>Count = 0"] --> M["Increment()"]
M -->|this.Count を +1| O2["Count = 1"]
サンプル
var counter = new Counter();
counter.Increment();
counter.Increment();
counter.Increment();
Console.WriteLine(counter.Count); // 3
class Counter
{
public int Count { get; private set; } // 外から書き換え不可、内部からはOK
public void Increment()
{
this.Count++; // this は「このオブジェクト自身」。this. は省略も可能
}
public void Reset()
{
this.Count = 0;
}
}
- メソッドはそのオブジェクト自身のプロパティ・フィールドを操作できる
thisは「このオブジェクト自身」を指す(多くの場面で省略可能)private setにすると「外部からは読めるが、変更は内部メソッド経由のみ」にできる
演習
var light = new Light();
light.Toggle();
Console.WriteLine(light.IsOn); // True
light.Toggle();
Console.WriteLine(light.IsOn); // False
// TODO: Toggle() を呼ぶたびに IsOn(bool)が反転する Light クラスを定義してください
___
- 期待される出力:
TrueFalse(2行)
ヒント1を見る
IsOn = !IsOn; で反転できます
ヒント2を見る
class Light { public bool IsOn { get; private set; } public void Toggle() { IsOn = !IsOn; } }
まとめ
- メソッドはオブジェクト自身の状態を操作する
thisは自分自身を指す(省略可能なことが多い)private setで「外部読み取り・内部変更」を表現できる
次回: 公開範囲を制御する「アクセス修飾子とカプセル化」です。