派生設定クラスに基づいて、正しい派生クラスを自動的にインスタンス化しようとしています。
ここには、基本設定クラスとともにメインの基本クラスがあります
public abstract class BaseClass
{
public BaseClass() { }
public abstract BaseClassSettings Write();
}
public class BaseClassSettings
{
}
ここに私の派生クラスとその設定クラスがあります
public class DerivedFoo : BaseClass
{
public DerivedFoo(DerivedFooSettings settings)
{
// Apply settings
}
public override BaseClassSettings Write()
{
DerivedFooSettings settings = new DerivedFooSettings();
return settings;
}
}
public class DerivedFooSettings : BaseClassSettings
{
}
public class DerivedBar : BaseClass
{
public DerivedBar(DerivedBarSettings settings)
{
// Apply settings
}
public override BaseClassSettings Write()
{
DerivedBarSettings settings = new DerivedBarSettings();
return settings;
}
}
public class DerivedBarSettings : BaseClassSettings
{
}
すべての派生クラスの設定を 1 つの配列に保存できます
DerivedFoo foo = new DerivedFoo();
DerivedBar bar = new DerivedBar();
BaseClassSettings[] s = new BaseClassSettings[2];
s[0] = foo.Write();
s[1] = bar.Write();
XML 形式でディスクにシリアル化されます。
派生設定クラスに基づいて派生クラスを自動的にインスタンス化するにはどうすればよいですか?
したがって、配列要素が DerivedBarSettings クラスの場合、DerivedBar クラスの新しいインスタンスを作成します。
クラスの数に応じて増え続けるelse ifステートメントを使用せずにこれを行いたいと思います。
if (BaseClassSettings is DerivedFooSettings)
new DerivedFoo(settings)
else if (BaseClassSettings is DerivedBarSettings)
new DerivedBar(settings)
これはどのように行うことができますか?
================================================== =============================
[編集]
これが私が使用しているものです:
[
XmlInclude(typeof(DerivedSettingsClassA)),
XmlInclude(typeof(DerivedSettingsClassB)),
XmlInclude(typeof(DerivedSettingsClassC)),
XmlInclude(typeof(DerivedSettingsClassD)),
XmlInclude(typeof(DerivedSettingsClassE)),
]
public abstract class BaseSettingsClass
{
public abstract DerivedClass Load(Game1 game, OutputDimensionSettings settings);
}
これの唯一の欠点は、すべての派生クラスに対して XmlInclude を明示的に定義する必要があることです。