12.12 C#基础

一、堆和栈的区别?

1.GC方面:
  • 栈→先进后出→一片连续内存域→系统自动分配和维护,产生的垃圾系统自动释放
  • 堆→无序的→不连续的内存域→用户控制释放→不释放的话内存到达一定值时GC回收
2.存储方面
  • 栈上通常保存着我们代码执行的步骤,如方法、变量等;而堆上存放的则多是对象,数据等。
  • 栈像一堆叠放的盒子,用的时候从最顶部取,调用完毕立即释放;堆像一个仓库,调用完毕不会立即被清理掉。
3.缓存方面:
  • 栈→一级缓存→调用完毕立即释放
  • 堆→二级缓存→生命周期由垃圾回收算法决定

在内存中,变量会被分配在栈上进行操作。在堆上创建一个对象,会将对象的地址传给栈上的变量,反过来叫变量指向此对象,或者变量引用此对象,也就是栈上的变量指向了堆上地址为XXX的实例(对象)。

二、静态构造函数

  1. 静态构造函数没有访问修饰符(只能public,但不能写public),也没有参数。
  2. 在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类。
  3. 一个类只能有一个静态构造函数。
  4. 无参构造函数可以与静态构造函数共存。
  5. 最多只运行一次。
  6. 静态构造函数不能被继承。
  7. 如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
  8. 如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。

三、在类的构造函数前加上static会报什么错?为什么?

还是不知道到底报啥错,回去再看= =

看完了:如果本来构造函数前有public,如果这时加上static,“静态构造函数中不允许出现访问修饰符”

构造函数格式为public+类名如果加上 static 会报错(静态构造函数不能有访问、型的对象,静态构造函数只执行一次;
运行库创建类实例或者首次访问静态成员之前,运行库调用静态构造函数;
静态构造函数执行先于任何实例级别的构造函数;
显然也就无法使用this和 base 来调用构造函数。
一个类只能有一个静态函数,如果有静态变量,系统也会自动生成静态函数。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值