C#のプロパティ

いまさらだけども、C#のプロパティについて。要するに、外見はメンバ変数、内実はメソッドということですね。C++Javaにはない便利な文法です。getter/setterを変数に見せかける糖衣構文といったところでしょうか。

namespace PropertyTest
{
    class Hoge
    {
        public int Piyo
        {
            get { return piyo; }
            set { piyo = value; } // valueはキーワード
        }
        private int piyo;
    }
    class Program
    {
        static void Main(string[] args)
        {
            Hoge a = new Hoge();
            a.Piyo = 101;
            System.Console.WriteLine( "a.Piyo = " + a.Piyo );
            
            while (true) ;
        }
    }
}

さらにデリゲートを使って、下記のようなことをすることもできますが、まあ、こんなのはせずに済むにこしたことはないでしょうね。

namespace DelegateTest
{
    delegate int GetIntDelegate();
    delegate void SetIntDelegate(int val);
    
    class Hoge
    {
        public int Piyo
        {
            get { return piyo; }
            set { piyo = value; }
        }
        private int piyo;
    }
    class Program
    {
        static void Main(string[] args)
        {
            Hoge a = new Hoge();

            GetIntDelegate GetPiyo = delegate
            {
                return a.Piyo;
            };
            SetIntDelegate SetPiyo = delegate(int val)
            {
                a.Piyo = val;
            };

            SetPiyo(666);
            System.Console.WriteLine( "a.Piyo = " + GetPiyo() );

            while (true) ;
        }
    }
}