详细解释下 const 常量 和 readonly 常量 的区别
前者是编译时常量,后者是运行时常量。
1、static 表示被修饰的对象的生命周期与当前的应用程序域相同,因此可以在多个实例中共享
const和readonly是c#声明常量的两种方式,它们间的区别如下:
2、const表示常量且只能在声明时赋值,因此const的常量在编译时就能确定,它如果没有被static修饰并不能在多个实例中共享(通常static会和const一起使用以作为标志位来用,但不是必须的)
3、readonly只能用来修饰成员字段,且它所修饰的字段可以在声明时和构造函数中赋值且在构造函数结束后就不能再赋值,因此它在运行时确定
4、#define name value 是宏定义,是文本级的替换,没有类型安全(const和readonly都是类型安全的)。在c#中可以用const来替换
const和readonly是c#声明常量的两种方式,它们间的区别如下:
2、const表示常量且只能在声明时赋值,因此const的常量在编译时就能确定,它如果没有被static修饰并不能在多个实例中共享(通常static会和const一起使用以作为标志位来用,但不是必须的)
3、readonly只能用来修饰成员字段,且它所修饰的字段可以在声明时和构造函数中赋值且在构造函数结束后就不能再赋值,因此它在运行时确定
4、#define name value 是宏定义,是文本级的替换,没有类型安全(const和readonly都是类型安全的)。在c#中可以用const来替换
最后一个特点。const常量都是默认static,所以const不可以和static混用。
readonly 常量既可以是静态的,也可以是非静态的。所以,readonly 可以和 static 混用。
关于这个,是静态成员和非静态成员的区别了,属于另外一个话题,这里就不阐述了。
readonly 常量既可以是静态的,也可以是非静态的。所以,readonly 可以和 static 混用。
关于这个,是静态成员和非静态成员的区别了,属于另外一个话题,这里就不阐述了。