Unity&&C#学习笔记-const、readonly、static 与 sealed

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,表示这个方法不可以再被重写。

优点

  1. 更高的执行效率:如前所述,标记为sealed的类和方法可能会让编译器进行某些优化,从而提高代码执行的效率。

  2. 增强封装性:通过使用sealed关键字,你可以保证你的类不会被其他类继承,或者你的方法不会被子类覆盖。这可以让你的代码更加安全,避免未经意的修改破坏了你的类的行为。

  3. 减少复杂性sealed关键字能够限制类的继承层次,降低软件设计的复杂性,并且使得代码更容易理解和维护。

缺点

  1. 限制了灵活性:如果一个类被声明为sealed,那么它就不能被继承,这可能限制了代码的复用和类的扩展。某些情况下,你可能需要创建原类的扩展版本,但由于sealed的限制,你无法直接从原类继承。

  2. 影响单元测试:基于继承的单元测试方法(例如使用Mock对象)可能会受到sealed类或方法的影响。因为sealed类不能被继承,所以无法创建派生的Mock类进行测试。



原文链接:https://blog.csdn.net/lym940928/article/details/88386224

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值