假设我们在类中有静态构造函数,普通构造函数和静态方法。
在Main()
中我们的代码为:
Classname.staticmethod();
在这种情况下,在执行静态方法之前,哪个构造函数被称为1st?: - 静态构造函数或普通构造函数?
答案 0 :(得分:5)
class Foo
{
static Foo() { Console.WriteLine("Static constructor is called."); }
public Foo() { Console.WriteLine("The constructor is called."); }
public static void Bar() { Console.WriteLine("The static Bar method is called."); }
}
public static void Main()
{
Foo.Bar();
}
输出结果为:
// Static constructor is called.
// The static Bar method is called.
MSDN
说的是静态构造函数:
在创建第一个实例之前自动调用它,或引用任何静态成员。
未调用实例构造函数,因为您没有创建实例。
有关构造函数have a look at this question的执行顺序的更多信息。
答案 1 :(得分:1)
将始终调用静态构造函数 - 无论是调用静态方法还是创建实例。
假设有一个默认的实例构造函数,它将在调用new Classname();
答案 2 :(得分:1)
静态构造函数仅自动调用一次。它将在执行静态方法后立即调用,或者创建实例。以先到者为准。
因此,在这种情况下,会立即调用静态构造函数,因为您调用了静态方法。 您可以将其视为创建静态类的实例
答案 3 :(得分:1)
来自Static Constructors (C# Programming Guide)
静态构造函数具有以下属性:
•静止 构造函数不接受访问修饰符或具有参数。
•自动调用静态构造函数来初始化类 在创建第一个实例之前或任何静态成员之前 引用。
•无法直接调用静态构造函数。
•用户无法控制何时执行静态构造函数 在该计划中。
•静态构造函数的典型用法是当类使用a时 日志文件和构造函数用于将条目写入此文件。
•创建包装类时,静态构造函数也很有用 对于非托管代码,当构造函数可以调用LoadLibrary时 方法
•如果静态构造函数抛出异常,则运行时不会 再次调用它,类型将保持未初始化状态 程序所在的应用程序域的生命周期 运行
这是我写的一个快速示例,用于演示会发生什么:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Classname.staticmethod();
Classname name = new Classname();
Console.ReadLine();
}
}
public class Classname
{
public static void staticmethod()
{
Console.WriteLine("staticmethod called");
}
static Classname()
{
Console.WriteLine("Static Constructor called");
}
public Classname()
{
Console.WriteLine("Instance Constructor called");
}
}
}
输出:
名为
的静态构造函数staticmethod调用
实例构造函数名为
答案 4 :(得分:0)
在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类。