第5回 3.プロパティ

クラスのフィールドは、基本的に外部からのアクセスを許可してはいけません。
なぜならば、設定されたフィールドによっては思わぬ障害が発生する可能性があるため
です。
例えば、あるフィールドは0-255迄がセットされることを前提に設計していたにも関わら
ず、10000がセットされてしまった場合、意図しない動作をする可能性があります。
そのため、セットされる値のチェックなどを行った後、フィールドの更新などを行う必
要が出てきます。
それがプロパティです。
プロパティは、安全な形でフィールドにアクセスする為の機能と言ってよいでしょう。
C++であれば、フィールドにアクセスす為に必要な変数ごとにset/getメソッドを作って
いましたが、プロパティを使えば=演算子を用いてのアクセスを可能にしてくれます。
更に、プロパティは読み込み専用にもすることが出来ます。

以下に実現方法を記述しますが、プロパティというのがどういうものかが分かればいま
のところ問題はありません。

   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }
       class Member
       {
           private string _name;
           public string Name
           {
               get
               {
                   return _name;
               }
               set
               {
                   _name = value;
               }
           }
       }
       private void Form1_Load(object sender, EventArgs e)
       {
           Member mem = new Member();
           mem.Name = "Miffy";
           label1.Text = mem.Name;
       }
   }

_nameがMemberのフィールドです。
privateなので、外部からアクセスは出来ません。
例えば、Main関数内で、men._nameとしても、コンパイルエラーが発生します。
NameがMemberのプロパティです。
通常の変数と宣言は変わりませんが、中括弧でくくり、中にget/setキーワードを使い、
set時、get時の動作を記述します。
setを書かなければ読み出し専用になります。

この例で、
mem.Name = "Miffy";
というコードは、setの処理が実行されます。
valueにはパラメータ、この例では"Miffy"が渡されます。
つまり、privateフィールドの_nameに、パラメータ"Miffy"を代入しています。

label1.Text = mem.Name;
というコードは、getの処理が実行されます。
つまり、privateフィールド_nameの値を返しています。

ちなみに、この例のようにチェック機構を入れていないset/getは、privateフィールド
をpublicフィールドにしていると一緒なので、意味はありません。
サンプルということで一つ……

そういえば、一番初めのサンプルHello Worldでは、LabelのTextに、"Hello World"を代
入していました。LabelのTextは、プロパティです。
最終更新:2007年10月12日 13:13
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。