static variables initialization

前端 未结 2 1062
深忆病人
深忆病人 2020-12-13 18:55

Today I had a discussion with my colleague and concluded following points. Kindly throw some light if all are correct or some modification is required.

  1. When st
相关标签:
2条回答
  • 2020-12-13 19:19

    1.-3.You cannot exactly know when it happens and so you cannot depend on it. A static constructor will give you a little control what happens when it get called.

    public class UtilityClass
    {
      //
      // Resources
      //
    
      // r1 will be initialized by the static constructor
      static Resource1 r1 = null;
    
      // r2 will be initialized first, as static constructors are 
      // invoked after the static variables are initialized
      static Resource2 r2 = new Resource2();
    
      static UtilityClass()
      {
        r1 = new Resource1();
      }
    
      static void f1(){}
      static void f2(){}
    }
    

    4.Static constructors are slow

    The exact timing of static constructor execution is implementation-dependent, but is subject to the following rules:

    • The static constructor for a class executes before any instance of the class is created.
    • The static constructor for a class executes before any of the static members for the class are
      referenced.
    • The static constructor for a class executes after the static field initializers (if any) for the class.
    • The static constructor for a class executes, at most, one time during a single program instantiation.
    • The order of execution between two static constructors of two
      different classes is not specified.
    0 讨论(0)
  • 2020-12-13 19:23

    All of your points are correct.

    The reason static constructors should be avoided is because the compiler injects code everywhere any method of the class is called to check that the static constructor has been called. This has a negative impact on performance.

    What you can do is have a private static field in you class that is assigned a dummy value when the default (or other non static) constructor is called. This initializes all static fields on object creation.

    0 讨论(0)
提交回复
热议问题