2007年04月29日

C# プロパティの憂鬱

C#のプロパティって便利なようで使えなくないか、微妙な感じ。
名前そのままで、読み込みは public だけど、値を書き換えるのは protected or private でって設定ができないんだよなぁ。
もうちょっと空気を読んで欲しい。。。


//プロパティを利用しない書き形
class Test
{
private int Otakara;

public int GetOtakara()
{
return this.Otakara;
}

public Test(int inOtakara)
{
this.Otakara = inOtakara;
}
};



//プロパティを使ってみよう!!
class Test
{
private int Otakara
{
//読み込みは public で
public get //エラー!!
{
return this.Otakara;
}
//書き込みは private で
set
{
this.Otakara = value;
}
}

public Test(int inOtakara)
{
this.Otakara = inOtakara;
}
};


ちなみに MSのサンプルだとこげな風に書いてある事が多い気がする。


//MS推奨??
class Test
{
//小文字でメンバを定義するよ.
private int otakara;
//外側には見栄えが良い大文字で定義するよ.
public int Otakara
{
get
{
return this.otakara;
}
}

public Test(int inOtakara)
{
//メンバの先頭を小文字にしたくないよね。。。
this.otakara = inOtakara;
}
};


外には見栄えの良い大文字で表現して内部は小文字って感じ。
内部は見えないところだから見栄を張らなくていいらしい。将軍様の国か、どっかの温泉街か。

やっぱ、メンバってクラスの中ではグローバルであって危険な変数だから先頭を大文字にして強調したいよ。


だからといって、

//昔のようなハンガリアン!
this.m_Otakara

ってのはイヤだなー。

そもそも、メンバに m_ をつける癖をつけるぐらいだったら、this. をつける癖をつけたほうが合理的だ。
ローカル変数に this. をつけたらコンパイラが怒ってくれる。
こっちの方が誰が見てもメンバとわかる。

話がズレたけど、つまり、

this.Aaaaaaaa ってな感じになればいいわけよ。

そんで、外からは読み込みのみで書き込みは内部だけって感じにできないかなぁ。

プロハティの発想はいいと思うんだよなぁ。
いちいち、 getXXX setXXX ってアクセッサを定義するのは面倒。
だから、楽チンにかけるようにしたよ!! ってところは十分評価できる。

だけど、実際使ってみると、なかなか思うようには行かないですよ。。。

ふつーアクセッサの大部分は getXXX であって、 setXXX はめったに使われないよね。
setXXX で設定するぐらいなら、初期化ならコンストラクタか初期化用のメソッド呼ぶし、計算したいなら普通にメソッドたたくし。

そう考えると、読み込みは public だけど、値を書き換えるのはprotected or private って設定ができるのが一番楽のような気がするんだが、
どーなんでしょうか。


はっ!!????????


そうか、、、もしかしてプロパティをアクセッサ代わりに使おうという考えが間違っているのかもしれない!

プロパティの起源をよくよく考えてみれば、



private void Form1_Load(object sender, EventArgs e)
{
this.Text = "うがー";
//Builder だと、 this.Cation = "うがー"; ね。
}


ってヤツをやりたかったために プロパティって作ったんぢゃないのかと。

this.Text の実装は WinAPI ベースで行けば、 setWindowText() で値の書き換え。
やっていることは、アクセッサってレベルぢゃねーぞ
立派なメソッドだね。


プロパティは、アクセッサとしても使えるかもしれないが、それはたまたま利用できただけで、本当の目的はメソッドをラップして自然に見せるための機能って考えれば、現在の実装も理解できる。
posted by rti at 08:28| Comment(1) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
set アクセサと get アクセサはそれぞれ別のアクセス修飾子をつけられるはずですけど...
Posted by じゃんぬねっと at 2007年09月19日 20:03
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/40310778

この記事へのトラックバック