C# 静态只读字段在内存中是否只有一个副本?
无论存在多少封装类型的对象,静态只读字段在内存中是否只有一个副本 例如:C# 静态只读字段在内存中是否只有一个副本?,c#,syntax,static,field,readonly,C#,Syntax,Static,Field,Readonly,无论存在多少封装类型的对象,静态只读字段在内存中是否只有一个副本 例如: class A{ static readonly SomeType foo; static A(){ foo = new SomeType(); } ... 那么,在整个程序中,foo是否只存在一次,无论有多少个A实例?来自(我的重点) I.8.4.3静态场和静态方法 类型 可以 声明与类型关联的位置,而不是与的任何特定值关联的位置 类型。这些地点是 静态场 是那种类型的。因此,静态字段声明一个 由该
class A{
static readonly SomeType foo;
static A(){
foo = new SomeType();
}
...
那么,在整个程序中,foo
是否只存在一次,无论有多少个A
实例?来自(我的重点)
I.8.4.3静态场和静态方法
类型
可以
声明与类型关联的位置,而不是与的任何特定值关联的位置
类型。这些地点是
静态场
是那种类型的。因此,静态字段声明一个
由该类型的所有值共享。与非静态(实例)字段一样,静态字段也是类型化和
那种类型永远不会改变。静态字段始终限于单个应用程序域
(见§)
I.12.5
),但它们也可以按每个线程进行分配
允许在每个线程的基础上进行静态分配
在大多数情况下,代码段中只有一个由foo
引用的SomeType
实例
如果您涉及多个应用程序域,或者使用[ThreadStatic]
对其进行修饰,则可能存在多个实例。来自(我的重点)
I.8.4.3静态场和静态方法
类型
可以
声明与类型关联的位置,而不是与的任何特定值关联的位置
类型。这些地点是
静态场
是那种类型的。因此,静态字段声明一个
由该类型的所有值共享。与非静态(实例)字段一样,静态字段也是类型化和
那种类型永远不会改变。静态字段始终限于单个应用程序域
(见§)
I.12.5
),但它们也可以按每个线程进行分配
允许在每个线程的基础上进行静态分配
在大多数情况下,代码段中只有一个由foo
引用的SomeType
实例
如果您涉及多个应用程序域,或者用
[ThreadStatic]
装饰它,那么可能存在多个实例。因此,为了确保所有值都共享它,这意味着它是相同的,并且只创建一次?是的,A
的所有值都共享它。你在创建一个单例吗?我想它是一个单例。是的,我需要这个字段在程序中只创建一次。如果你使用类似于static readonly Lazy foo=new Lazy(()=>new SomeType())
,那么以后访问foo.Value
,你甚至不需要那里的静态构造函数。仅限NET4+。因此,为了确保它被所有值共享,这意味着它是相同的,并且只创建了一次?是的,它被A
的所有值共享。你在创建一个单例吗?我想它是一个单例。是的,我需要这个字段在程序中只创建一次。如果你使用类似于static readonly Lazy foo=new Lazy(()=>new SomeType())
,那么以后访问foo.Value
,你甚至不需要那里的静态构造函数。净4+。@oɔɳɹ,@oɔɳɹ,