任何人都可以在readOnly
之前或之后使用static来建议哪个语句更好private readonly static string s_profileFilename = "";
OR
private static readonly string s_profileFilename = "";
答案 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 = "";
但功能上它们是相同的。