我已经了解了常量和静态只读字段。我们有一些类只包含常量值。它们用于我们系统中的各种事情。所以我想知道我的观察是否正确:
对于所有公开的内容,这些常量值是否总是静态只读的?并且只对内部/受保护/私有值使用const?
你有什么建议?我甚至应该不使用静态只读字段,而应该使用财产吗?
我已经了解了常量和静态只读字段。我们有一些类只包含常量值。它们用于我们系统中的各种事情。所以我想知道我的观察是否正确:
对于所有公开的内容,这些常量值是否总是静态只读的?并且只对内部/受保护/私有值使用const?
你有什么建议?我甚至应该不使用静态只读字段,而应该使用财产吗?
当前回答
公共静态只读字段有点不寻常;公共静态财产(只有一个get)将更常见(可能由私有静态只读字段支持)。
常量值直接写入调用站点;这是双面的:
如果值是在运行时获取的,可能是从config获取的如果更改常量的值,则需要重建所有客户端但它可以更快,因为它避免了方法调用。。。…有时JIT可能会内联
如果该值永远不会改变,那么常量是好的-零等是合理的常量;p除此之外,静态财产更常见。
其他回答
常量:
应在声明时给出值编译时间常数
只读:
值可以在声明时或在运行时使用构造函数给出。值可能会因使用的构造函数而异。运行时间常数
Const:Const只是“常量”,它的值是常量,但在编译时是常量。并且必须为其赋值。默认情况下,常量是静态的,我们不能在整个程序中更改常量变量的值。静态只读:静态只读类型变量的值可以在运行时赋值,也可以在编译时赋值,并在运行时更改。但该变量的值只能在静态构造函数中更改。并且不能进一步改变。它只能在运行时更改一次
参考:c-sharpcorner
公共静态只读字段有点不寻常;公共静态财产(只有一个get)将更常见(可能由私有静态只读字段支持)。
常量值直接写入调用站点;这是双面的:
如果值是在运行时获取的,可能是从config获取的如果更改常量的值,则需要重建所有客户端但它可以更快,因为它避免了方法调用。。。…有时JIT可能会内联
如果该值永远不会改变,那么常量是好的-零等是合理的常量;p除此之外,静态财产更常见。
需要注意的一点是const仅限于基元/值类型(字符串除外)。
如果可以提供编译时间常数,请使用const:
private const int Total = 5;
如果需要在运行时计算值,请使用静态只读:
private static readonly int GripKey = Animator.StringToHash("Grip");
这将导致编译错误,因为在编译时不可能获得该值。
private const int GripKey = Animator.StringToHash("Grip");