静态只读字段在内存中只有一个副本吗?

时间:2016-05-15 19:12:35

标签: c# syntax static field readonly

静态只读字段在内存中只有一个副本,无论其封装类型有多少个对象存在?

例如:

class A{
  static readonly SomeType foo;
  static A(){
    foo = new SomeType();
  }
...

foo在整个程序中只存在一次,无论A有多少个实例?

1 个答案:

答案 0 :(得分:3)

来自ECMA-335(强调我的)

  

I.8.4.3静态字段和静态方法

     

类型   能够    声明与该类型相关联的位置,而不是任何特定值   类型。这样的位置是   静态字段    这种类型。因此,静态字段声明了一个位置   是由所有类型的值共享。就像非静态(实例)字段一样,输入静态字段   那种类型永远不会改变静态字段始终限于单个应用程序域   (见§   I.12.5   ),但它们也可以基于每个线程分配。

ThreadStaticAttribute允许基于每个线程进行静态分配。

对于大多数常见用途,您的代码段中只会有一个SomeType foo[ThreadStatic]引用的实例。

如果您涉及多个应用程序域,或使用success: function (file, response) { this.removeFile(file); } 进行装饰,则可能存在多个实例。