アクセサ以外のプロパティは必要か

Delphiでその便利さに驚き、Javaで提供されていないことを嘆き、C#で使えることに感激したプロパティ(Property)だが、C#でプログラミングする場合、最近ではフィールドをカプセル化するためのアクセサにしかプロパティを使おうとしない自分がいる。

プロパティはオブジェクトのカプセル化に寄与する他、オブジェクトの初期化時には作りたくない、リソース消費の大きいオブジェクトの遅延生成やプロキシとして使えるし、フィールド変数を省略できたりもするし便利と思っていたはずなのだが、そのような処理のトリガとしてプロパティを実装する場合、他の処理との順序依存や他のオブジェクトとの相互依存が発生しやすくなってしまう。

プログラマにとってやっかいなバグの一つとして「自分が意図していない処理が(どこかで)実行される」という現象があるが、一見フィールドへのアクセスに見えるプロパティはこの現象を引き起こしやすいと思うのだ。(プロパティの命名規約は大抵、フィールド名をキャメライズしたものだから、特にコードレビュー時には間違い易い)
対してメソッドは何かの処理を行う明確な意思を持って呼ばれるので、同様の間違いは起こりにくいと感じる。

むろんプロパティも我々にとっては道具であり、上手く使う分には何も問題は無いのだがリスクが高い道具だなと思うのである。
高度なコード補完やリファクタリング機能を持つ開発環境が普通になりつつある今、いま一度プロパティのあり方を考えても良いかなと思った次第。