私はこのようなクラスがある場合:私は、クラスをファクタし直すかの段階で1つのコンストラクタが別のコンストラクタを実装すると、利点や欠点はありますか?
public class Foo
{
public IEnumerable<Bar> Bars { get; set; }
public Foo()
{
Bars = new List<Bar>();
}
}
をし、このような最初のものを実装して、二次のコンストラクタを追加:
public class Foo
{
public IEnumerable<Bar> Bars { get; set; }
// some more properties were added
public Foo()
{
Bars = new List<Bar>();
}
public Foo(string parameter): this()
{
.... some code here
}
}
を私も持っている可能性があり
public class Foo
{
public IEnumerable<Bar> Bars { get; set; }
// some more properties were added too
public Foo()
{
InitilizeFoo();
}
public Foo(string parameter)
{
InitilizeFoo();
.... some code here
}
private void InitializeFoo()
{
Bars = new List<Bar>();
}
}
このシナリオではどちらのアプローチも有効ですが、どちらか一方を使用するとメリットか欠点がありますか?
は、より効率的なconstrcutorsを継承し、そのコードを高速に実行することや、私が代わりに第2の実施の効率化を知らない欠点がありますか。
私は両方を使用します。コンストラクタを連鎖させることが理にかなったら、私はそれを行います。しかし、時には(例は気にしません)私は 'InitializeFoo()'メソッドを使い、それをすべてのコンストラクタから呼び出しました。 – Nate
私が心配しているのは例外の安全だけです。 –