C# 静态的理解

目录

static

是什么

应用场景

GC会扫描并释放静态资源吗?

静态对象是单例模式的体现吗?

静态字段/静态构造函数

const

readonly

static readonly

static

是什么

  1. static修饰的变量或者方法不属于任何一个实例对象,而是被所有的对象所共享。
  2. 在类被第一次使用的时候,就会去加载被static修饰的部分,然后CLR会在内存中分配空间,只分配一 次。

应用场景

可以将一些只执行一次的初始化操作放到static代码块中去执行,后面根据需要还可以对static修饰的变量进行重新赋值。

GC会扫描并释放静态资源吗?

GC会扫描静态资源但是不会释放静态资源,静态资源不属于任何一个实例对象,所有的静态资源都会被存储在”静态存储区”里面,一直到程序退出,才会被回收。

静态对象是单例模式的体现吗?

  1. 不一定,单例模式要保证对象只能被创建一次。如果静态对象是私有的,并且只能通过静态方法来获取,那它就是单例模式的体现。
  2. 如果静态对象不是私有的,那它就可以被重新赋值,所以也就不是单例模式的体现。

静态字段/静态构造函数

  1. 静态构造函数是通过CLR调用的 ,静态构造函数在对象使用前完成初始化并且只执行一次。
  2. 静态字段也是由CLR调用的,静态字段在类型使用前完成初始化并且只执行一次。

const

  1. const是静态常量,编译时常量,属于类型级,通过类名直接访问,能被所有的对象共享。
  2. 叫编译时常量的原因是,它编译时会将其替换为所对应的值。
  3. 静态常量在速度上会稍稍快一些,灵活性却比动态常量差一些。
  4. 静态常量,隐式是静态的,不能再用static重复修饰。
  5. 在声明时初始化。
  6. 静态常量只能用来声明简单的基本数据类型。比如:int,long,string。
  7. 要声明一些从不改变且处处唯一的常量,使用静态常量。

readonly

  1. readonly是动态常量,运行时常量,属于对象级,可以通过对象来进行访问。
  2. 动态常量的值在运行时获取。
  3. 动态常量在性能上稍微差一点,灵活性比const好。
  4. readonly可以被static修饰,这时的static readonly和const非常相似。
  5. readonly可以在声明时初始化,或者在构造函数里面进行初始化。
  6. 动态常量可以是任意类型的数据。

static readonly

  1. static readonly是静态只读常量,如果在构造函数里面进行初始化,必须是静态无参构造函数。
  2. 对于那些本质上应该是常量,但是却无法使用const来声明的类型,就可以使用static readonly来进行 修饰。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子丶鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值