我注意到非静态类可以具有静态构造函数:
public class Thing
{
public Thing()
{
Console.WriteLine("non-static");
}
static Thing()
{
Console.WriteLine("static");
}
}
并且在初始化时,Thing
将首先调用静态构造函数的实例。
输出:
静态的
非静态
这有什么需要?您是否使用它来初始化非静态类型实例上的静态字段?
使用静态构造函数时有什么要考虑的吗?
您是否使用它来初始化非静态类型实例上的静态字段?
除了静态字段(或任何类型的静态成员)不与实例相关联外,其他内容几乎相同。它们与类型本身相关联,而不管它是静态类还是非静态类。
该文档列出了静态构造函数的一些属性,其中之一是:
- 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
在此,“在...之前”是指“在...之前”,并且其中任何一种首先发生。这是因为静态构造函数在单个程序执行中每个类型仅被调用一次。
使用静态构造函数时有什么要考虑的吗?
这是上面链接给出的完整列表,它应该使您了解使用静态构造函数时的期望:
静态构造函数不使用访问修饰符或具有参数。
在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
静态构造函数不能直接调用。
用户无法控制何时在程序中执行静态构造函数。
静态构造函数的典型用法是当类使用日志文件并且构造函数用于将条目写入此文件时。
当为非托管代码创建包装器类时,构造函数可以调用该
LoadLibrary
方法时,静态构造函数也很有用。如果静态构造函数引发异常,则运行时不会再次调用该异常,并且该类型将在程序运行所在的应用程序域的生存期内保持未初始化状态。
除了确保您不尝试访问非静态成员之外,因为您不在实例构造函数中,所以还必须考虑的另一件事是,在程序执行期间始终在特定时间调用静态构造函数。如前所述,除了控制“何时创建第一个实例或引用任何静态成员”之外,您无法控制它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句