1
我已經創建了派生類,並具有其派生的設置。構造函數中的派生設置爲'null'。基類重載構造函數不傳遞設置?
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);
}
}
這種方法的問題是,第三運營商只適用於基類和沒有通過一個新的實例到派生類的構造函數。 ('設置'保持爲空)
如何自動傳遞設置而不必在派生類的構造方法中複製第三運算符?
我無法將設置存儲在基類中,因爲它們的類型不正確。
我正在考慮在基類方法中暴露的設置屬性,當我提到將設置存儲在基類中(原始問題的最後一行)。問題是,需要將設置轉換爲每個派生類的正確派生設置。難道不是那麼醜嗎? – user1423893
@ user1423893:它會有些*難看,但我認爲它會比副作用更明確。 –