myugaruの色々構想中・・・!

「C#」「画像処理」「XNA未対応PCでゲームIDE作りの無謀な野望」

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  98  : 記事  0  : コメント  2320  : トラックバック  59

ニュース

myugaru
仕事(昔)=ヲタク系プログラマー~マスコミ系サポートデスク
仕事(今)=電子機器系サービス業
趣味a=パズルゲーム全般、シューティングは主に見学
趣味b=画像処理関係の勉強
趣味c=プログラミング言語の勉強
趣味d=アキバ系ヲタク
趣味e=芸能アイドル系ヲタク
d,e色の強いもう一つのブログ
最新目標=シューティングゲームを作る

わんくまりんく

わんくま同盟blog C#,VB.NET掲示板

ぶろぐつーる

あわせて読みたい

はてなりんぐ

書庫

日記カテゴリ

ギャラリ

お友達

リンク

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)

投稿日時 : 2008年3月31日 9:49

コメント

# re: [C#]自動プロパティの必要性 2008/03/31 10:19 オノデラ
【2】についてなんですが

> public int Width { get; private set; }

> public readonly int Width;

は別物ですね。上の方はプロパティを宣言しているクラス内で自由にセットできますが、下の方は初期化のときにしかセットできないですね。

# re: [C#]自動プロパティの必要性 2008/03/31 10:22 myugaru
To オノデラさん
あー確かにそうですね。意味がわかりました。
それと↑の赤字のやつが来ましたのでなにやら私に不利な形勢になりつつあります(^-^;;;
コメントありがとうございました。

# re: [C#]自動プロパティの必要性 2008/03/31 10:36 中博俊
元の発言に完全同意。
赤字はイラネ

リンクどうこうについては色々なところで語ってるからアレだけど、リンクさせるもの場合には公開する方法をどうするかはちょっとは考えるだろうからべつとして、基本はソースコード互換であれば何だっていい。
互換も置換できてフルコンパイルできるならどうでもいい。

私は少なくともソースコード互換を重視するので、同じといっても差し支えない。

# re: [C#]自動プロパティの必要性 2008/03/31 10:38 myugaru
To 中博俊さん
うう;;中さんは私の意見に賛同なのですねっ嬉しいっす!
どこまでもついていきますっ。。

# re: [C#]自動プロパティの必要性 2008/03/31 11:01 シャノン
> と同義である。同義なら短い【1'】を使う。

ソースコードの字面上は同義であっても、.NET のメタデータ的には違う。
特にリフレクション周りで違いが出てくる。

# re: [C#]自動プロパティの必要性 2008/03/31 11:09 myugaru
To シャノンさん
ありがとうございます。とりあえずもっかいまとめてみました。今度は合ってるかなあ;

# re: [C#]自動プロパティの必要性 2008/03/31 11:13 ゆーち
C#知らないです(w
ゲッタとセッタそのものが仮想関数として機能させることができるのであれば、「同義」にはなり得ませんね。

C++ Builder では拡張機能で実装されているのですが、最初は、myugaruさんと同じように同義だと感じていました。

プロパティは、れっきとしたカプセル化だと思うようになりましたから、現在は【1】と【1’】なら、かならず【1】を使うようにしています。







# re: [C#]自動プロパティの必要性 2008/03/31 11:28 myugaru
To ゆーちさん
おおC++Builder使いですかっ。私も業務で実はいまだに利用させていただいております。私は実はDelphi使いだったりもしますので、コンポーネントが使いまわせて便利なんですよねっ。
ああ、話題がそれました。
ご意見ありがとうございます。まとめなおしてありますのでよろしくお願いします。
http://blogs.wankuma.com/myugaru/archive/2008/03/31/130645.aspx

# re: [C#]自動プロパティの必要性 2008/03/31 20:09 出水
たしかに細かい違いがあるのはわかるけど、
実際にそれが問題になるパターンって限りなく0に近いと思います
だから、一緒

アセンブリ公開するのがわかっていれば、もともとフィールドでは置かないですしね

# re: [C#]自動プロパティの必要性 2011/03/14 14:33 naohiro19
public int Value { get; set; }

は、以下のようなコードに相当する動作をする:

private int __value;
public int Value
{
get { return __value; }
set { __value = value; }
}

但し、上のコードでは匿名のフィールドに便宜的に __value と命名している。実際はプログラマはこのフィールドにアクセスすることはできない。


# Strategy The Awesome gucci Marketing Campaign 2012/12/23 23:49 Reoglerolla
KbtLrz http://guccimenzujp.com/ - gucci メンズ DhnFul http://guccimenzujp.com/ JruNuw http://guccimenzujp.com/グッチ-メンズ財布-c-4.html - gucci 財布 CkmCdu http://guccimenzujp.com/グッチ-レディース長財布-c-2.html - グッチアウトレット MrwPnb http://guccijastore.com/ - グッチ JceFmh http://guccijastore.com/ SxsUqf http://guccijastore.com/グッチ-財布-c-2.html - グッチ 財布 LtsUrl http://guccijastore.com/グッチ-バッグ-c-1.html - gucci バッグ LgxAxi http://www.guccijpcheap.com/ - グッチ gucci PopRry http://www.guccijpcheap.com/グッチ-財布-c-3.html - gucci 財布 QpvAgy http://www.guccijpcheap.com/グッチ-バッグ-c-1.html - gucci バッグ IghTbo
http://www.bootswinterjp.com/ - アグ


Post Feedback

タイトル
名前
Url:
コメント