これらはほぼ同等です(パフォーマンスとメモリ使用量の違いはごくわずかです)。実際の違いは、次のような場合です。
private List<string>name = new List<string>();
...割り当ては、オブジェクトのインスタンスを作成するために使用されるコンストラクタに関係なく常に発生します。コンストラクタ内で代入を行うと、そのコンストラクタが使用されたときにのみ代入が行われます。
コンストラクタが複数ある場合でも、常に同じ方法でname
を初期化する必要がある場合は、最初のフォームを使用して各コンストラクタで明示的に初期化するよりも少し短くなります。
しかし、原則として、コードをより冗長にする場合でも、コンストラクタ実装のフィールドを初期化することをお勧めします。 2番目のコンストラクタを呼び出す場合は、不ほとんどすぐに捨てられたとの対象と作られてリストを作成し、このコードで
class MyClass
{
private List<string> _list = new List<string>();
public MyClass()
{
//some logic here
}
public MyClass(List<string> initialList) : this()
{
_list = initialList;
}
}
:コンストラクタで
ok、パフォーマンスとメモリ割り当てはどうですか? – retide
これは本当に意味をなさない。あなたがコンストラクタとしてそれを提供していない場合、何かを注入することはできませんし、テストのための特定のコンストラクタはcode smellです(それはあまり直接の依存関係を持つクラスを指します)。本当にクラスを分離したい場合は、変更が必要な可能性のあるすべてのパラメータをインタフェースとして使用します。 – Femaref
おそらく、このメンバ変数を使った彼の質問の文脈では、確かにオプションです。私はあなたが多くのプロパティを持っているかもしれない場合、インターフェイスを作成し、それを渡すことに同意します。 – Killnine