C#でクラスを書くときは、コンストラクタ内でのみ割り当てられていて、他の場所では変更されない場合は、プライベートな読み取り専用としてすべてのプライベートメンバー変数をマークすることをお勧めしますクラス?それとも、この過剰なのですか?C#クラスと読み取り専用のメンバー
答えて
はい、個人的には良いアイデアだと思います。私は可能な限り型を変えないようにしようとしています。変数を宣言すると、readonly
は良いです開始です。すべてのものではありません。もちろん、その変数が変更可能なもの(例:StringBuilder
または配列)であれば、それほど大きな助けにはなりません。私は変数を読み取り専用にしていますが、変数自体の値を変更したくないということを明らかにし、同じクラスの他の場所、おそらく数か月後に誤ってやってしまうのを防ぐためです。
あなたはJavaとC#の両方の指導者です。これは本質的にこのJavaの質問に相当するC#です。 http://stackoverflow.com/questions/137868/using-final-modifier-whenever-applicable-in-java ここでの議論は、Javaのものよりもずっとおしゃれなように思えます。 – RAY
@RAY:いいえ、Javaの 'final'は変数だけでなく、C#で' readonly'と 'sealed'を組み合わせたものです。もしあなたがクラスを封印するべきかどうか、あなたはもっと熱心な議論を見るでしょう... –
真。リンクされた質問は特にローカルとクラスの変数(引数とフィールド)について質問します... – RAY
はい、これは具体的にはreadonly
の意味です。他の場所に割り当てないことが既に分かっている場合(または少なくとも想定している場合)は、readonly
というマークを付けることをお勧めします。結局のところ、を削除すると、後で追加するよりもreadonly
のほうが簡単です。
はい - 後で値を変更する際に、読み取り専用であることを知らない他の開発者が作成したコードで問題に遭遇することはありません。
どのような良い質問と純粋に意見で答えるつもりです。私の意見は、私は常に変数へのプロパティを作成することです。その一例を以下に示す。
private int _myInt;
private int myInt {get{return _myInt;}}
それでも、変数はクラス内で突然変異することができます - それは開発者の意図を示すものではありません。方法。 –
変数を一度しか初期化せずに書き込むことができない場合は、constにします。
値がコンパイル時定数でない場合、またはインスタンスフィールドの場合はconstにすることはできません。 –
私はコンパイル時にconstがより効率的だと考えています。メンバがconstにできない場合は、readonlyのような別のルートが必要になります。さもなければ、私はそれをconstにします。 –
正しいタイプのものであっても、それをconstにするのは悪い考えかもしれません。たとえば、 "VersionNumber"というintフィールドがあるとします。それを読み込み専用にしないでください。バージョン番号は時間の経過とともに論理的に変化する量であるため、*定数*ではありません。 *変更したことのないものに対してのみconstを使用し、πの値や鉛の原子数のように*は決して変更しません。 –
読み取り専用あなたは、コンストラクタを介してサービスの参照を渡す状況で非常に理にかなっていますので、すなわち
public class MyViewModel { private readonly MyContext context; public MyViewModel(MyContext context) { this.context = context; } }
あなたは明らか、あなたのコンテキストが別のもので上書きしたくありませんクラス内のその特定のサービスに依存している多くのものを持つことができます。そして、それがコンストラクタパラメータであれば、通常、オブジェクトの有効な状態を作成して保持するために、その特定のサービスまたはオブジェクトに対してRELYを意味します。読み込み専用はそのことの良い指標です。プロパティにプライベートセットがあるということは、クラス外でそれを変更できないことを意味します。リードオンリーは、物事をより安全かつ理解しやすくするための追加の制約です。
- 1. WCF、シリアライズ、読み取り専用メンバー
- 2. 読み取り専用メンバーに値を割り当てる - C++
- 3. typescriptクラスの読み取り専用プロパティ
- 4. Kotlin - 読み取り専用外部クラス
- 5. 読み取り専用リストのC#
- 6. C#WPFの読み取り専用チェックボックス
- 7. 読み取り専用自動対(読み取り専用)プロパティ
- 8. 読み取り専用C#6.0
- 9. C++ ifstream読み取り専用ワード数
- 10. C#DevExpressスケジューラ読み取り専用
- 11. asp.net、c#.net読み取り専用フィールド
- 12. C#でプロパティアクセサ「読み取り専用」
- 13. powershellで読み取り専用メンバーを作成するには?
- 14. CurrentCulture.DateTimeFormat.LongTimePattern読み取り専用
- 15. 読み取り専用プロパティ
- 16. 読み取り専用プロパティ
- 17. 読み取り専用テキストボックス
- 18. 読み取り専用
- 19. 読み取り専用アソシエーション
- 20. 読み取り専用TFS
- 21. は読み取り専用
- 22. C#ファイルを読み取り専用で読み取り/書き込みする
- 23. WPF:読み取り専用TextBoxとバインディング
- 24. 読み取り専用トランザクション - タイムスタンプバウンドの読み取りのパフォーマンス
- 25. C#CSLAビジネスオブジェクトのジレンマ:読み取り専用vs読み込み/書き込み
- 26. vb.netクラス読み取り専用のプロパティは
- 27. mysqlの読み取り専用テーブル
- 28. ComboBoxの読み取り専用アイテム
- 29. Flash Builderの読み取り専用リッチテキストフィールド?
- 30. Linq2DBの読み取り専用列
すべてのコメントありがとうございます。私は先に進んで私のメンバーを読書だけにします。乾杯。 – Bobbo