类内部的静态变量

时间:2018-08-12 13:13:04

标签: c# static

我对静态变量非常困惑,实际上我是在程序下面执行的。

class ABC
{
    public static int prop { get; set; }
    const int i =5;
    static int j;

    public ABC()
    {
        prop = 8;
        j = 9;
        Console.WriteLine("Under ABC class's constructor.");
    }

    public int getValue()
    {
        j = 6;
        prop = 89;
        return j;
    }
}

class Program
{
    static void Main(string[] args)
    {
        ABC obj = new ABC();
        Console.WriteLine(obj.getValue());
        //Console.WriteLine(ABC.j);
        Console.ReadLine();
    }
}

其执行没有任何编译或运行时错误。

我有以下困惑。

  • 我们可以在非静态构造函数中分配静态变量/属性吗?
  • 我们还可以在实例方法内部分配静态变量/属性吗?
  • 如果我们可以在以上两种情况下对静态变量/属性进行赋值,那么静态构造函数的用途是什么?
  • 最后,在类中可以分配/初始化静态变量/属性的位置是什么?

1 个答案:

答案 0 :(得分:0)

  

我们可以在非静态变量内部分配静态变量/属性吗?   构造函数?

是的

  

我们可以在实例方法内分配静态变量/属性吗?   还吗?

是的

  

如果可以在上述两种情况下进行静态分配   变量/属性,那么静态构造函数有什么用?

静态构造函数也称为类型初始化器。它负责初始化定义它的类型。您可以使用它来执行可以预先完成的计算,并且对该类型的所有实例都相同。因此,创建实例时将节省一些执行时间,因为 the 计算已由类型初始化程序完成。请注意,类型初始值设定项在第一次使用类型之前运行。因此,您无法确定性地确定它何时真正运行。您也无法捕获由它引发的异常,因为您实际上并未自己调用类型初始化程序。因此,您需要注意不要将容易出错的操作放在类型初始化器中(例如,不要在其中进行IO操作)。

  

最后,我们可以在一个类中找到哪些位置   分配/初始化静态变量/属性?

从任何地方。请注意,即使跨线程,您也可以从任何地方读取和写入静态成员。这使得很难找到可能由于程序突变而导致内存中某个位置的静态错误。

作为旁注::尽量避免使用可变的静态内存,以使您的应用程序更简单。如果您确实需要...,则应考虑lock访问静态资源以防止数据争用。

相关问题