C# 使ってる人、自動プロパティってどうなんですか?
土日は丸々新作ゲームでつぶしてしまったmyugaruです^^;おはようございます。
追記:赤字で色々追加しております。結局このエントリー自体が無意味になりつつありますが、私のようにDLL分割しない場合、コンストラクタでフィールド初期化しますよ、って場合は有効だと弱く主張したいと思います・・。
追記:中さんは私の元意見に賛同だそうです。ちょっとだけ強気になれそうなmyugaruでした^^テヘ
追記:ごちゃごちゃしてきたのでまとめなおしています→[C#]自動プロパティの必要性(その2)
本題。
【1】public int Width { get; set; }
【2】public int Width { get; private set; }
【3】public int Width { private get; set; }
まず【1】は
【1'】public int Width;
と同義である。同義なら短い【1'】を使う。(←同義ではありませんでした。まとめなおした方をご覧ください)
次に【2】は
【2'】public readonly int Width;
とコンストラクタで初期値を設定するのなら同義である。同義として使う場合なら短い【2'】を使う。
(追記訂正:↑【2】と【2'】は同義ではありませんでした。オノデラさんのコメント参照ください。オノデラさんありがとうございました。)
最後に【3】。書き込み専用プロパティ(@@;)?
これの必要な場面に未だかつて出くわした事がない。
こういう例があるよ、とコメントに書かれそうですが、
プロパティで実装するなら読み取れるべきです。
書き込み専用になる必要性があるならインターフェースとしてメソッドを公開すべきです。
「そうじゃない」と自信を持って反論のある方にはぜひ説得力あるコメントをいただきたいですが、
仮にじゃあそんな説得力ある反論があるとすれば、
C#言語開発者レベルの人がそれを見逃すとは考えられません。
それともそのうちwriteonlyというキーワードが増えるんでしょうか?
【1】や【2】をたとえば単純な参照では無いプロパティに将来置き換える可能性がある、
という反論をする人もいるかと思いますが、
【1'】や【2'】を書いておいてその単純参照じゃないコードに書き直す手間とどっちが多いですか?
具体的には以下の【4】のようなコードへです。
【4】
private int _Width;
public int Width { get { return _Width; } set { _Width = value; } }
頭で考えてるだけじゃなく手で実際にやってみることをお勧めします。
【1】や【2】にしたところで【4】にするための追加コード量は圧倒的に多くなんらメリットを感じません。
●結論
自動プロパティは当面、私には全く不要な機能です。
私に説得力ある自動プロパティの良さを教えてくださる方がいれば遠慮なくコメントください。(↓もう来ちゃいましたね;;)
●書き込んで30分で抗議のお便りが(^^;
アセンブリ分割してリンクするような場合、最初にフィールド公開しちゃうと後でプロパティ化できないと抗議のめーるが某身内の方から寄せられました(しかも携帯メールへ^^;;;)
おっしゃるとおりです。私が悪かった・・・。だって私そんなアセンブリDLL分割するような規模の開発したことねーんだよっっ!(負け惜しみにもなってないorz)