本文へスキップ
BecomeCoder

C#オブジェクト指向コース · 第1章 オブジェクト指向 · レッスン4

メソッドと this

ブラウザで完結

導入

クラスのメソッドは、自分自身のデータを操作します。「自分自身」を明示的に指すのが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 クラスを定義してください
___
  • 期待される出力: True False(2行)
ヒント1を見る

IsOn = !IsOn; で反転できます

ヒント2を見る

class Light { public bool IsOn { get; private set; } public void Toggle() { IsOn = !IsOn; } }

まとめ

  • メソッドはオブジェクト自身の状態を操作する
  • thisは自分自身を指す(省略可能なことが多い)
  • private setで「外部読み取り・内部変更」を表現できる

次回: 公開範囲を制御する「アクセス修飾子とカプセル化」です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。