我想基於派生的設置類自動實例化正確的派生類。從相關設置類自動創建派生類?
這裏我主要的基類與基礎設置類沿
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
{
}
我可以保存所有在派生類中設置一個陣列
DerivedFoo foo = new DerivedFoo();
DerivedBar bar = new DerivedBar();
BaseClassSettings[] s = new BaseClassSettings[2];
s[0] = foo.Write();
s[1] = bar.Write();
它以XML格式序列化到磁盤。
如何根據派生設置類自動實例化派生類?
所以如果數組元素是一個DerivedBarSettings類,那麼就創建一個DerivedBar類的新實例。
我想這樣做,而不是使用越來越多的其他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。
我可以向你保證,這不是家庭作業(除非你指望作爲功課的目標正在進行的工作,所以也許是這樣)。我正在爲我的博士項目編寫一個不是計算機科學基礎的原型。我想學習如何在這種情況下利用泛型的好處,你(或其他人)可以幫助嗎? – user1423893