Tim*_*ong 41
const和static确实意味着不同的东西,不同的存储机制,不同的初始化.static是读/写,因此必须为存储分配内存,并且必须在运行时初始化.甲静态可以与文字值或表达式进行初始化.相反,const是不可变的,必须使用编译时常量(通常是文字值或可在编译时完全评估的表达式)进行初始化.该值在编译时是已知的,因此可以直接嵌入到生成的代码中,因此不需要在运行时分配存储.
Gre*_*gle 22
常量本质上是静态的,因此这将是多余的.
如前所述,Java中的static final与C#中的static readonly相同.实际上,您说这个成员是静态的,其内容无法更改.您也可以在两种情况下指定静态构造函数的值.
但是C#中的const是完全不同的东西.它更符合C(DEFINE指令)中的常量,但考虑到OOP.它是静态的,因为它是常量 - 每个实例都有这个常量和相同的值,没有构造函数可以设置它.此外,有人可能无需创建实例即可访问常量.当你想到它时,非静态常数就没有意义了.你几乎可以说常量不是对象的一部分 - 它们只是用它来提供上下文,一个强大的名字.
Java没有const的等价物.你可以读到某个地方,静态最终版本等同于DEFINE,但那只是模糊不清.完全不同的机制,没有任何共同点,但最终导致代码相同 - 代码的可维护性和可读性更好.
你只需要停止考虑C#中的常量作为静态成员,因为它们不是.将它们视为DEFINE的 OOP版本.当您考虑封装时,最终和只读字段的原因是为了防止您自己的代码意外地更改其值.这对我来说听起来并不常见.
Sumary:
| 归档时间: |
|
| 查看次数: |
13224 次 |
| 最近记录: |