C#中的静态构造函数究竟是什么?

时间:2010-12-21 12:33:46

标签: c#

我对C#中的静态构造函数有几个问题。

  1. 静态构造函数究竟是什么以及它们与非静态构造函数的区别。
  2. 我们如何在申请中使用它们?
  3. * *已编辑

    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();静态构造函数不会调用。


    任何指针或建议都将不胜感激  “

    谢谢

3 个答案:

答案 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)

在加载类时运行。

它将打印: {

  1. hi来自静态A
  2. A
  3. }

    public class A{
      static A{
         print("hi from static A");
      }
    
      public A() {
        print("A");
      }
    
      main() {
          new A();
      }
    }