- 144 名前:デフォルトの名無しさん [2009/02/12(木) 19:57:31 ]
- (続き)
・続けて繰り返し呼び出された場合、プロパティは毎回異なる値を返す可能性がありますが、 フィールドは常に同じ値を返します。System.DateTimeクラスにはNowという読み取り専用の クラスがあります。このプロパティは現在の日付と時間を返すため、呼び出されるたびに 異なる値を返します。この実装は誤りで、MicrosoftでもNowをプロパティではなくメソッドに 直せるものなら直したいと考えています。 ・プロパティメソッドは副作用を持つ場合がありますが、フィールドへのアクセスには そのようなことはありません。言い換えると、型のユーザーがさまざまなプロパティに 値を任意の順序で設定できて、型の動作に違いがでないようにすべきだということです。 ・プロパティメソッドは追加のメモリを必要とするか、オブジェクトの状態の一部では ない何かへの参照を返して、そのオブジェクトを操作しても元のオブジェクトには 何の影響もない場合があります。フィールドは常にオブジェクトの状態の一部であることが 保証されているオブジェクトへの参照を返します。コピーを返すようなプロパティを利用すると 開発者は混乱します。また、このような仕様がドキュメント化されていないこともあります。 プロパティは使われすぎているというのが筆者の懸念です。プロパティとフィールドの違いを 一覧すれば、プロパティを定義する方が使いやすく、かつ開発者の混乱を招かないパターンは 非常に少ないことに気づくでしょう。プロパティによって得られるのは、少々単純化された構文 だけです。パフォーマンスの向上もない上に、コードは読みづらくなります。もし筆者が、.NET Frameworkとコンパイラの設計に関わっていたら、プロパティを提供することはなかったでしょう。 代わりに、開発者にGetXxxやSetXxxというメソッドを必要に応じて定義させるようにしていたこと でしょう。コンパイラが何か特殊な、単純化された構文でこれらのメソッドを呼び出せるように したいなら、そうすればよかったのです。ですが、フィールドアクセスとは異なる構文を使って 欲しいと思います。開発者が何をしているのか(つまりメソッドを呼び出しているということを) しっかり認識できる構文ということです。
|

|