クラスのフィールドは、基本的に外部からのアクセスを許可してはいけません。
なぜならば、設定されたフィールドによっては思わぬ障害が発生する可能性があるため
です。
例えば、あるフィールドは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