我已经了解了常量和静态只读字段。我们有一些类只包含常量值。它们用于我们系统中的各种事情。所以我想知道我的观察是否正确:
对于所有公开的内容,这些常量值是否总是静态只读的?并且只对内部/受保护/私有值使用const?
你有什么建议?我甚至应该不使用静态只读字段,而应该使用财产吗?
我已经了解了常量和静态只读字段。我们有一些类只包含常量值。它们用于我们系统中的各种事情。所以我想知道我的观察是否正确:
对于所有公开的内容,这些常量值是否总是静态只读的?并且只对内部/受保护/私有值使用const?
你有什么建议?我甚至应该不使用静态只读字段,而应该使用财产吗?
当前回答
常量:
应在声明时给出值编译时间常数
只读:
值可以在声明时或在运行时使用构造函数给出。值可能会因使用的构造函数而异。运行时间常数
其他回答
静态只读:
可以在运行时通过静态构造函数更改该值。但不是通过成员函数。
常量:
默认情况下为静态。值不能从任何地方(构造函数、函数、运行时等)更改。
只读:
可以在运行时通过构造函数更改该值。但不是通过成员函数。
您可以查看我的存储库:C#属性类型。
readonly关键字与const关键字不同。常量字段只能在字段声明处初始化。只读字段可以在声明或构造函数中初始化。因此,只读字段可以具有不同的值,具体取决于所使用的构造函数。此外,虽然const字段是编译时常量,但只读字段可以用于运行时常量
从这个简短而清晰的MSDN参考中。
Const:常量变量值必须与声明一起定义,之后它不会改变。这在编译时有一个值。
ReadOnly:我们可以在声明时定义只读变量值,也可以在运行时使用构造函数。没有类实例,只读变量无法访问。
静态只读:我们可以在声明时定义静态只读变量值,也可以仅通过静态构造函数,但不能使用任何其他构造函数。我们还可以在不创建类实例(作为静态变量)的情况下访问这些变量。
如果我们必须在不同的程序集中使用变量,静态只读将是更好的选择。请在以下博客文章中查看详细信息:
Const Strings——一种非常方便的射击自己脚的方式
如果可以提供编译时间常数,请使用const:
private const int Total = 5;
如果需要在运行时计算值,请使用静态只读:
private static readonly int GripKey = Animator.StringToHash("Grip");
这将导致编译错误,因为在编译时不可能获得该值。
private const int GripKey = Animator.StringToHash("Grip");
需要注意的几个相关事项:
常量int a
必须初始化。初始化必须在编译时进行。
只读int a
可以使用默认值,而无需初始化。初始化可以在运行时完成(编辑:仅在构造函数内)。