我对C#中的静态构造函数有几个问题。
* *已编辑
public class Test
{
// Static constructor:
static Test()
{
Console.WriteLine("Static constructor invoked.");
}
public static void TestMethod()
{
Console.WriteLine("TestMethod invoked.");
}
}
class Sample
{
static void Main()
{
Test.TestMethod();
}
}
输出: 调用静态构造函数。 调用了TestMethod。 所以,这意味着静态构造函数将被调用一次。如果我们再次调用Test.TestMethod();静态构造函数不会调用。
任何指针或建议都将不胜感激 “
谢谢
答案 0 :(得分:8)
Static constructors是在加载类时仅执行 ONCE 的构造函数。每次创建对象时都会执行常规(非静态)构造函数。
看一下这个例子:
public class A
{
public static int aStaticVal;
public int aVal;
static A() {
aStaticVal = 50;
}
public A() {
aVal = aStaticVal++;
}
}
考虑一下这段代码:
A a1 = new A();
A a2 = new A();
A a3 = new A();
此处,static
构造函数将在程序执行期间被称为 first ,并且仅一次。常规构造函数将被调用三次(每次对象实例化一次)。
static
构造函数通常用于初始化静态字段,例如,为静态字段分配初始值。请记住,您只能访问static
成员(方法) static
构造函数上的,属性和字段。
如果您需要“多次执行静态构造函数”,则无法执行此操作。相反,您可以在静态方法中“多次”运行要运行的代码,并在需要时调用它。类似的东西:
public class A {
public static int a, b;
static A() {
A.ResetStaticVariables();
}
public static void ResetStaticVariables() {
a = b = 0;
}
}
答案 1 :(得分:2)
您使用它们的方式与使用实例构造函数相同 - 设置默认值。只有在这种情况下,您才会初始化静态字段,因此静态构造函数只执行一次。
请注意,在第一次调用类之前,不会执行静态构造函数中的代码。
答案 2 :(得分:1)
在加载类时运行。
它将打印: {
}
public class A{
static A{
print("hi from static A");
}
public A() {
print("A");
}
main() {
new A();
}
}