构造函数中的派生设置为“null”.基类重载构造函数不传递设置
本文关键字:构造函数 设置 重载 基类 派生 null | 更新日期: 2023-09-27 18:35:58
我创建了一个派生类,具有自己的派生设置。
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);
}
}
此方法的问题在于,第三运算符仅适用于基类,并且不会将新实例传递到派生类构造函数中。 ("设置"保持空)
如何自动传递设置,而不必在派生类的构造函数方法中复制三级运算符?
我无法将设置存储在基类中,因为它们的类型不正确。
这很丑陋,但您可以更改 base
调用以分配要传递回的值settings
:
public DerivedFoo(Game1 game, DerivedFooSettings settings)
: base(game, settings = (settings == null ? new DerivedFooSettings() : settings))
请注意,这不会更改传递给DerivedFoo
构造函数的内容 - 它只是更改构造函数中settings
参数的值。
当然,如果BaseClass
公开了一个Settings
属性(可能受保护)并在构造函数期间设置了该属性,则可以只在DerivedFoo
构造函数主体中使用属性值。那会更干净,IMO - 我想我从来没有在这样的构造函数链调用中使用过赋值表达式......