Classのように記述することでnumプロパティを通じてnumValの値を参照できます。tc.numのようなことが出来るわけです。これは、TestClassにpublicなnum変数を用意するのと何が違うのでしょうか?もちろん、プロパティを用いずにGetNum,SetNumという関数を作っても同じことなのですがこの方がまだ、関数の使用意図(GetなのかSetなのか)がはっきりして良いのではないかと思います。同じ名前でGetもSetもできるプロパティは変数と同じではないのかという疑問です。これは、TestClassにpublicなnum変数を用意するのと何が違うのでしょうか?publicなnum変数を用意するのと同じ動きをさせているので何も違いはありません。同じ名前でGetもSetもできるプロパティは変数と同じではないのかという疑問です。get/set内で単に読み出し/書き込みしている"だけ"なら同じです。プロシージャですから、実装を記述できます。Setで〜Changedを発生させたり。リフレクションとかではフィールドとプロパティは区別されますので、「プロパティでなければならない」という制約が出てきたりって事もあります。#使い分けの基準ではありませんが関数との違いは、関数は処理ですのでその結果の副作用として値が変わることがあるというところでしょうか。値ではなく目的ですから。会議室でも同じ話題がありましたね。副次的な作用とは、イベントを起こしたり、バインド処理を行ったり、実際の色を変える処理を呼んだりすることです。プロパティを例に出すと、プロパティの値が変わった段階でホントに背景色も変わるわけです。これをただの変数で表現することはできません。値の検証とは仕様外の値をセットしようとした時に検証の余地があるということです。例外を放り投げるのが基本です。これもただの変数で表現することはできません。ウィンドウを持っているというのも理由のひとつです。付けられますから除外ですね。付けられますから除外ですね。プロパティのReadOnlyとフィールドのReadOnlyは異なるので、これも一つの利点になると思います。プロパティの場合は、外部からはReadOnlyですが、内部からは書き換え可能ですよね。付けられますから除外ですね。これも一つの利点になると思います。プロパティの場合は、外部からはReadOnlyですが、内部からは書き換え可能ですよね。?Setがなければ内部からも書き換えできませんよ。