我已经了解了常量和静态只读字段。我们有一些类只包含常量值。它们用于我们系统中的各种事情。所以我想知道我的观察是否正确:

对于所有公开的内容,这些常量值是否总是静态只读的?并且只对内部/受保护/私有值使用const?

你有什么建议?我甚至应该不使用静态只读字段,而应该使用财产吗?


当前回答

常量:

应在声明时给出值编译时间常数

只读:

值可以在声明时或在运行时使用构造函数给出。值可能会因使用的构造函数而异。运行时间常数

其他回答

readonly关键字与const关键字不同。常量字段只能在字段声明处初始化。只读字段可以在声明或构造函数中初始化。因此,只读字段可以具有不同的值,具体取决于所使用的构造函数。此外,虽然const字段是编译时常量,但只读字段可以用于运行时常量

从这个简短而清晰的MSDN参考中。

如果Consumer位于不同的程序集中,我将使用静态只读。将const和Consumer放在两个不同的集合中是一个很好的方法来击中自己的脚。

Const、readonly、static readonly-执行类似操作但有重要区别的关键字:

•Const-是一个变量,其值为常量,在编译时赋值。必须为其赋值。默认常量是静态的,我们不能在整个程序中更改常量变量的值。

•只读-意味着我们可以在运行时更改的值,也可以在运行时间分配它,但只能通过非静态构造函数。

•静态只读值​​可以在运行时分配,也可以在编译时分配,并在运行时更改。但该变量的值只能在静态构造函数中更改。并且不能进一步改变。在执行过程中只能更改一次。

您可以在此处找到示例-https://www.c-sharpcorner.com/UploadFile/c210df/difference-between-const-readonly-and-static-readonly-in-C-Sharp/

静态只读:

可以在运行时通过静态构造函数更改该值。但不是通过成员函数。

常量:

默认情况下为静态。值不能从任何地方(构造函数、函数、运行时等)更改。

只读:

可以在运行时通过构造函数更改该值。但不是通过成员函数。

您可以查看我的存储库:C#属性类型。

Const:Const只是“常量”,它的值是常量,但在编译时是常量。并且必须为其赋值。默认情况下,常量是静态的,我们不能在整个程序中更改常量变量的值。静态只读:静态只读类型变量的值可以在运行时赋值,也可以在编译时赋值,并在运行时更改。但该变量的值只能在静态构造函数中更改。并且不能进一步改变。它只能在运行时更改一次

参考:c-sharpcorner