2

C# でより適切なオブジェクトの初期化スタイルはどれですか?

  • プライベート オブジェクトを宣言し、同じ行で初期化します。

    private List<ReportRow> rows = new List<ReportRow>();
    
  • プライベート オブジェクトを宣言し、コンストラクターで初期化します。

    private List<ReportRow> rows;
    

    コンストラクタで

    rows = new List<ReportRow>();
    
  • プライベート オブジェクトを宣言し、それが使用されるメソッドで初期化します。

    private List<ReportRow> rows;
    

    そして私の Run() メソッドで

     rows = new List<ReportRow>();
    

ありがとう

4

4 に答える 4

2

それらはすべて適切です。それは本当にコードの詳細に依存します。フィールドを空のリストに初期化するだけの場合、私の好みは、宣言とインラインで初期化することです。コンストラクターのパラメーターに依存するリストに値を入れる場合は、コンストラクターで初期化します。人口が高価でスキップできる場合は、消費するコードが最初に呼び出されたときに初期化します。

于 2012-12-31T15:05:45.647 に答える
1

最初の2つのオプションは同じです。明確な方を使用する必要があります。
また、フィールドを作成する必要がありますreadonly

3番目のオプションは異なります。nullを呼び出すまで、フィールドは残りますRun()
それはおそらく良い考えではありません。

于 2012-12-31T14:59:04.540 に答える
0

オプション

プライベート オブジェクトを宣言し、それが使用されるメソッドで初期化します。

が最適です。1 つの関数で使用する場合、コンストラクターで初期化したり、クラス レベルで宣言したりする必要はありません。

コンストラクターで渡される (注入される) 値を割り当てる場合は、コンストラクターでオブジェクトを初期化する必要があります。コンストラクターで宣言することは、そのスコープにローカライズされることを意味し、コンストラクターで使用されず、1 つのメソッドでのみ使用される場合、コンストラクターで初期化してもあまり意味がありません。そのメソッドにスコープする必要があります。

于 2012-12-31T15:04:17.817 に答える
0

スラッグスターの答えにコメントし、オブジェクトが1つのメソッドでのみ使用されている場合でも、初期化に費用がかかる場合はクラスレベルで宣言するのが最善であることに言及します。必要な場合にのみ実行されるように、使用されているメソッドで初期化することもできます。ただし、メンバー変数を使用すると、初期化する前に null かどうかを確認できるため、一度だけ実行されます。

この質問により、C++ の静的ローカル変数が恋しくなりますが、クラスのインスタンスごとに異なるオブジェクトが必要な場合でも、それらは役に立ちません。

于 2012-12-31T23:28:31.757 に答える