以下程序的输出是
base init
BaseMethod
derived init
DerivedMethod
例如,从派生类调用base方法会触发Base类的init存根,而不是Derived类的相同。
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Derived.BaseMethod());
Console.WriteLine(Derived.DerivedMethod());
}
}
class Base
{
public static string BaseMethod() { return "BaseMethod"; }
static bool init = InitClass();
static bool InitClass()
{
Console.WriteLine("base init");
return true;
}
}
class Derived : Base
{
public static string DerivedMethod() { return "DerivedMethod"; }
static bool init = InitClass();
static bool InitClass()
{
Console.WriteLine("derived init");
return true;
}
}
实际上,我的基类没有初始化需求,但我的派生类确实如此,并且我希望确保它在任何人以任何方式与类交互之前运行。不幸的是,大多数与它的交互是通过基类中定义的方法,如上例所示。
我可以改变Derived类来隐藏BaseMethod,如下所示:
class Derived : Base
{
public static new string BaseMethod() { return Base.BaseMethod(); }
public static string DerivedMethod() { return "DerivedMethod"; }
static bool init = InitClass();
static new bool InitClass()
{
Console.WriteLine("derived init");
return true;
}
}
这会产生在调用Derived.BaseMethod()时初始化派生类的预期结果,但它并不令人满意,因为它没有意义的路由'必须为每个公共静态基本方法完成的代码。
有什么建议吗?
答案 0 :(得分:2)
而不是使用static new bool InitClass()
的派生类,为什么不使用标准的静态构造函数?
static bool init = false;
static Derived()
{
Console.WriteLine("derived init");
init = true;
}