ReadOnly静态vs静态readOnly C#

时间:2018-04-02 08:20:04

标签: c#

任何人都可以在readOnly

之前或之后使用static来建议哪个语句更好
private readonly static string s_profileFilename = "";

OR

private static readonly string s_profileFilename = "";

5 个答案:

答案 0 :(得分:4)

这两个是一样的!

根据语言规范,第10.5.2节

  

当字段声明包含只读修饰符时,字段   声明引入的是readonly字段。直接分配   readonly字段只能作为该声明的一部分或在   实例构造函数或同一类中的静态构造函数。

第1.6.5节

  

使用static修饰符声明的字段定义静态字段。一个   static field只标识一个存储位置。不管怎样   创建了一个类的许多实例,只有一个副本   一个静态的领域。

这两个摘录使用" include"和"与"。这意味着修饰符没有顺序。他们只需要在那里,他们就会产生影响。

因此,对于哪一个更好"没有答案。这取决于您自己(或可能是您的团队)的偏好。对我来说,它是static readonly

在这种特殊情况下,static readonly可以替换为const,因为字符串文字被认为是常量表达式(第7.19节),而const是隐式静态的(第10.4节)。

答案 1 :(得分:2)

生成的IL没有差异。

案例1:

.field public static initonly int32 A

生成IL:

public readonly static int B;  

案例2:

.field public static initonly int32 B

生成IL:

=

所以这取决于你的偏好。

答案 2 :(得分:0)

没关系。但是,为了您自己的理智,请在整个代码中保持一致。

许多人使用的常见模式是: [public / private / internal] [静态] [readonly]

为了使这个问题更有趣,在英语中可以看到类似的并行,其中实际上存在形容词的共同排序: http://www.gingersoftware.com/content/grammar-rules/adjectives/order-of-adjectives/

答案 3 :(得分:0)

编译器不关心“修饰符”的顺序,它对它们的处理方式完全相同。查看the Microsoft docs about modifiers以获取该语言中所有修饰符的列表。

我个人更喜欢以下顺序:

[access modifiers] [static] [readonly] [volatile]

答案 4 :(得分:0)

ReSharper(默认情况下)建议:

private static readonly string s_profileFilename = "";

但功能上它们是相同的。