hakeの日記

Windows環境でプログラミングの勉強をしています。

C# - クラス - プロパティ

インスタンス変数にそのままアクセスするのではなくて、インスタンス変数そのものは隠蔽して手続きを介して一見インスタンス変数の様にアクセスする方法。
インスタンス変数に値をセットする処理は set{ } 、このとき外部から与える値は value とする。インスタンス変数から値を取得する処理は get{ } とし、ブロック内でreturn 値; とする。アクセス方向は必要に応じて片方だけでも可。
特に隠蔽も処理も必要としない場合は

    piblic 型 プロパティ名 {set; get:}

として処理は書かない。最後にセミコロンは付けない。
 

using System;

//プロパティによるアクセス

class MyClass
{
    private int data2;
    
    //そのままアクセス可
    public int Data1 {set; get;}
    public int Data2
    {
        //数値がマイナスの場合には0にする
        set
        {
            if(value < 0){ this.data2 = 0; }
            else { this.data2 = value; }
        }
        //2倍の値を返す
        get
        {
            return this.data2 * 2;
        }
    }
}

class MyMain
{
    static void Main(string[] args)
    {
        MyClass m = new MyClass();
        m.Data1 = 10;
        Console.WriteLine("Data1 = {0}", m.Data1);//Data1 = 10
        m.Data2 = -10;
        Console.WriteLine("Data2 = {0}", m.Data2);//Data2 = 0
        m.Data2 = 20;
        Console.WriteLine("Data2 = {0}", m.Data2);//Data2 = 40

    }
}