const与readonly
二者都都将变量声明为只读 ,并且在变量初始化后就不可以改写。
readonly动态常量
动态常量的值则是在运行的那一刻才获得的,编译器编译期间将其标识为只读常量,而不用常量的值代替,这样动态常量不必在声明的时候就初始化,而可以延迟到构造函数中初始化。
切只能在定义时或者构造函数中初始化,其他的地方都不能再修改其值
在类里面可以不初始化值,有默认值
readonly修饰的常量则可以延迟到构造函数初始化;
引用类型readonly只有地址是不变的
readonly常量只能声明在类中;
const静态常量
指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值。没有分配内存
没有分配内存,因为在编译后,在IL代码中嵌入了常里值
const修饰的常量在声明的时候必须初始化;因为编译时就会替代值
const默认是静态的,只能通过类名访问
const常量既可以声明在类中,也可以在函数体中;
小结:
const和readonly都是只读的。
const默认是static的,而且在编译期间已经解析完成。因此const和static readonly只能有类访问,而readonly通过实例访问。
根据所使用的构造函数,readonly 字段可能具有不同的值。
对于每一次编译后的结果,const的值是固定的,而readonly的值是可以在运行的时候才确定值的。
const是静态常量,readonly是动态常量。
const高效,readonly灵活。
实际使用中,常常用static readonly来代替const,以此来平衡const在灵活性上的不足。
Static
static,readonly是在运行时计算出其值的,所以还能通过静态构造函数来赋值。
静态类
静态类特点:
1.不能支持实例化,原因是静态类只有一个"副本",说明静态类分配空间时只有一份.
2.静态类中的不能存在实例成员只能存在静态成员.
3..静态类中的构造函数必须是静态的,且不能有修饰符.
4.静态类默认是封闭的所以不能继承
静态类的应用场景一般是封装一些工具类.
sealed
即密封类和密封方法。
用于阻止类被继承或方法被重写。
在方法中使用sealed,只能是在已经被重写的方法中定义sealed,表示这个方法不可以再被重写。
优点
-
更高的执行效率:如前所述,标记为
sealed
的类和方法可能会让编译器进行某些优化,从而提高代码执行的效率。 -
增强封装性:通过使用
sealed
关键字,你可以保证你的类不会被其他类继承,或者你的方法不会被子类覆盖。这可以让你的代码更加安全,避免未经意的修改破坏了你的类的行为。 -
减少复杂性:
sealed
关键字能够限制类的继承层次,降低软件设计的复杂性,并且使得代码更容易理解和维护。
缺点
-
限制了灵活性:如果一个类被声明为
sealed
,那么它就不能被继承,这可能限制了代码的复用和类的扩展。某些情况下,你可能需要创建原类的扩展版本,但由于sealed
的限制,你无法直接从原类继承。 -
影响单元测试:基于继承的单元测试方法(例如使用Mock对象)可能会受到
sealed
类或方法的影响。因为sealed
类不能被继承,所以无法创建派生的Mock类进行测试。
原文链接:https://blog.csdn.net/lym940928/article/details/88386224