コンストラクタを使用して派生クラスの保護されたメンバーを初期化したいが、base()を呼び出しているのでこのコールを呼び出すことができないので、 ":ベースコンストラクタの呼び出し時に初期化メソッドを再利用する
public class ABase
{
public object Param1 { get; set; }
public object Param2 { get; set; }
protected object Param3 { get; set; }
public ABase()
: this(null, null)
{ }
public ABase(object param1)
: this(param1, null)
{ }
public ABase(object param1, object param2)
{
Param1 = param1;
Param2 = param2;
}
}
public class A : ABase
{
public A()
{ InitParam3(); }
public A(object param1)
: base(param1)
{ InitParam3(); }
public A(object param1, object param2)
: base(param1, param2)
{ InitParam3(); }
private void InitParam3()
{
Param3 = "param3";
}
}
すべてのコンストラクタでInitParam3()
を呼び出すことを避ける方法はありますか?私はすべての変更を設計するために開いています。
現在のソリューション(あなたのコード)は@lazyberezovsky答えより優れています。私のコメントを参照してください。 – Aliostad
「すべてのコンストラクタでInitParam3()を呼び出さないようにする方法はありますか? –
私は実際にあなたの両方に同意する必要がありますが、それぞれのソリューションには独自の欠点があります。 – misha