2017-10-13 89 views
2

我需要初始化将从类的许多实例中访问的字段。初始化需要一些计算,并且会有数百万个实例,所以我需要初始化只发生一次,并且要在所有实例之间共享变量以节省内存。最后,我想在抽象类中做到这一点。在运行时初始化抽象类中的静态字段

如何在运行时初始化由CalculateMyVal()计算的静态变量my_val

abstract class MyAbstract 
{ 
    static readonly int my_val; 
    int CalculateMyVal() 
    { 
     int x = 1; 
     // Long Calculation on x 
     return x; 
    } 
} 

回答

5

您可以使用static constructor,如果你想你的初始化静态变量:

public abstract class MyAbstract 
    { 
     static readonly int my_val; 
     static MyAbstract() 
     { 
      my_val = CalculateMyVal(); 
     } 

     static int CalculateMyVal() 
     { 
      int x = 1; 
      // Long Calculation on x 
      return x; 
     } 
    }