質問: 現在C#を勉強中です。 C#にプロパティという機能がありますが調べた感じだと **フィールドと、それに対するゲッター・セッターを冗長性なく実装できる機能** と解釈したのですが、 疑問がいくつか出ました。 * プロパティを使うのとプロパティを使わず実装することに見た目以外に違いはあるのか * プロパティを使う必要性はあるのか。普通に使わずに行うと何か問題はあるのか * プロパティを使わないとできないことがあるのか。(はたまたプロパティだとできないことはあるか) * どちらがスタンダードなやり方か(現場でも個人でも) まだC#は勉強し始めたばかりなのでおかしいところがあるかもしれませんが、C#に詳しい人教えてください。 宜しくお願いします。
回答: > > プロパティを使うのとプロパティを使わず実装することに見た目以外に違いはあるのか > > > 見た目以外に違いはありません。が、見た目の影響は意外と広いと思います。例えば、元はフィールドで実装したもので、こう使えましたら: ``` class PositiveInt { int value } PositiveInt n = new PositiveInt() n.value = 3 n.value = -3 ``` クラスは正整数ですけど、最後の行では負整数を入れてしまいました。この状況を防ぎたい。プロパティで実装すれば、使う側は何もしなくてもいいです。セッターで実装すれば、使う側も全部セッターを使わなければなりません。リファクタリングの作業量はかなり違います。 > > プロパティを使う必要性はあるのか。普通に使わずに行うと何か問題はあるのか > > > 上記のように、プロパティでフィールドに条件の追加ができます。プロパティを使わなくてもその条件を追加するのなら、新たな条件付きクラスを作るか、その条件をすべてのメソッドでチェックしなければなりません。もちろん、条件を捨てればいけません。プロパティを使わないと色々作業量が多くなります。 > > プロパティを使わないとできないことがあるのか。(はたまたプロパティだとできないことはあるか) > > > プロパティを使わないとできないことがありませんが、使わないと作業量が多くなります。 > > どちらがスタンダードなやり方か(現場でも個人でも) > > > ゲッターセッターよりはプロパティがスタンダードです。