什么是静态构造函数初始化静态变量,而不是价值

问题描述:

直接分配在下述代码的优势,也有分配静态变量的值的两种方式“RateOfInterest”。什么是静态构造函数初始化静态变量,而不是价值

  1. 通过直接分配值。
  2. 通过在静态构造函数中进行赋值。

我相信对于'客户'类的多个对象,'RateOfInterest'将只有一个内存分配使用任一种方法。 (如果我错了,请纠正我)。

是否有过另一种方法的任何特定的优势。

class Customer 
{ 
    int AccNo; 
    static int RateOfInterest; 
    //static int RateOfInterest = 10; // Approach 1 
    static Customer() 
    { 
     RateOfInterest = 10;   // Approach 2 
    } 
    public Customer(int AccNo) 
    { 
     this.AccNo = AccNo; 
    } 
    public void Display() 
    { 
     Console.WriteLine($"AccNo : {AccNo}, Rate : {RateOfInterest}"); 
    } 
} 
+2

静态字段在执行静态构造函数之前被初始化,即所有。请参阅https://msdn.microsoft.com/en-us/library/aa645758(v=vs.71).aspx –

它们将被编译为相同的东西。所以没有什么区别,

这不是私有的构造。即static constructor

静态构造函数用于初始化任何静态数据或执行需要仅执行一次的特定操作。它会自动创建第一个实例之前或调用的任何静态成员被引用

我使用静态构造函数时,直接指定值时,一行过长(这是意见为主)或当我需要多行初始化一个值。

+0

谢谢,我刚纠正了错误。 – Koder101

+0

当你的代码被编译时,它将使用静态构造函数来初始化静态字段,属性。这就是为什么我说没有区别。请阅读msdn的链接以查看静态构造函数的其他属性。 –

实际上,这两种方法没有区别。

如果你想分配一个字面值,如10,然后直接分配给它的声明是速度更快。

但是,如果你的变量的初始化是比较复杂的,就像这样:

val = new MyClass(); 
val.A = 1; 
val.B = "Hi"; 
val.SomeMethod(); 
val.AnotherMethod(); 

你应该把它放在一个静态构造函数。