独自の派生設定を使用して派生クラスを作成しました。
public abstract class BaseClass
{
public BaseClass(Game1 game, BaseClassSettings settings)
{
if (settings == null)
{
Console.WriteLine("BASE PANIC!");
}
}
public abstract BaseClassSettings Write();
}
public abstract class BaseClassSettings
{
public abstract BaseClass Load(Game1 game, BaseClassSettings settings);
}
クラスをインスタンス化するとき、コンストラクターをオーバーロードして基本クラスを呼び出し、正しい派生設定の新しいインスタンスを作成します。
public class DerivedFoo : BaseClass
{
public DerivedFoo(Game1 game, DerivedFooSettings settings)
:base(game, settings == null ? new DerivedFooSettings() : settings)
{
if (settings == null)
{
Console.WriteLine("DERIVED PANIC!");
}
}
public override BaseClassSettings Write()
{
DerivedFooSettings settings = new DerivedFooSettings();
return settings;
}
}
public class DerivedFooSettings : BaseClassSettings
{
public override BaseClass Load(Game1 game, BaseClassSettings settings)
{
return new DerivedFoo(game, settings as DerivedFooSettings);
}
}
このメソッドの問題は、3次演算子が基本クラスに対してのみ機能し、派生クラスのコンストラクターに新しいインスタンスを渡さないことです。(「設定」はnullのままです)
派生クラスのコンストラクターメソッドで3次演算子を複製せずに、設定を自動的に渡すにはどうすればよいですか?
設定が正しいタイプではないため、基本クラスに設定を保存できません。