ReadOnly 静态 vs 静态只读 C#

Mak*_*med 3 c#

任何人都可以建议哪个语句更好,在 readOnly 之前或之后使用 static

private readonly static string s_profileFilename = "";
Run Code Online (Sandbox Code Playgroud)

或者

private static readonly string s_profileFilename = "";
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 5

这两个是一样的!

根据语言规范,第 10.5.2 节

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

和第 1.6.5 节

使用 static 修饰符声明的字段定义静态字段。静态字段仅标识一个存储位置。无论创建了多少个类的实例,静态字段都只有一个副本。

这两段摘录使用了“包含”和“与”这个词。这意味着没有修饰符的顺序。他们只需要在那里,他们就会产生影响。

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

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