【C#】类和结构、栈和堆、值类型和引用类型、里氏替换

目录

一、类和结构的区别:

二、栈和堆的区别:

1.官方解读:

2.自己理解(栈和堆举例区别):

如何记住呢?

三、值类型和引用类型:

1.net中那些事值类型,那些是引用类型?

四、里氏替换

1.官方解读

2.自己理解:

举例:

3.类型转换可以分为as和is两种:

4.is和as


一、类和结构的区别:

二、栈和堆的区别:

1.官方解读:

栈:

是编译期间就分配好的内存空间,因此代码中必须就栈的大小有明确的定义;

局部值类型变量、值类型参数等都在栈的内存中。

堆:

是程序运行期间动态的分配空间,可以根据程序的运行情况确定分配堆的内存大小。
 

2.自己理解(栈和堆举例区别):

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。

使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

如何记住呢?

上边拿吃饭举例了,栈就像是餐馆,堆就像是在家,我们去吃的都是涮羊肉

1.栈的谐音就是沾(沾一沾吃完就走了)。

2.堆如何联想(自己准备材料,要把刷的东西都堆在一起,吃完饭碗啥的要堆起来去刷)。

 

三、值类型和引用类型:

值类型引用类型
1.变量储存真正的数据1.储存再内存中的起始地址
2.数据储存再栈上面2.数据储存在堆上面
3.Sytem.ValueType3.Sytem.Object
4.不能用Null释放4.能用Null释放
5.超过变量作用范围自动释放5.有.net框架的垃圾回收器自动回收
6.占用内存少(数据直接存栈里)6.占用内存多(现在栈申请地址,在存堆里)
7.执行速度快7.执行速度慢

 

 

 

 

 

 

 

 

 

1.net中那些事值类型,那些是引用类型?

 

四、里氏替换

1.官方解读

里氏替换就是子类可以替换父类,并且出现在父类能够出现的任何地方。

反过来,父类对象是不能替换子类,需要强行转换才可以。

2.自己理解:

父类new父类的空间,父类要转换成子类,父类没有子类的内容,而子类继承了父类的一切内容,子类所需的空间要比父类多,所以父类转换不了子类,而子类的空间大,子类空间里包含了父类所需的内容,所以子类可以转父类,有一些空间是没有用到。

举例:

父类有一个属性和一个方法,假如占两个空间,子类自己也有一个属性和一个方法,但是子类由于继承了父类,子类相当于拥有2个属性和2个方法,所以子类的空间会有4个,父类类型的2个加上自己的2个,所以子类可以转换成父类,而父类不能转换成子类。
 

3.类型转换可以分为as和is两种:

is返回的是bool值,true是能转换,false是不能转换。

as 如果转换不了不报异常,返回的值为null。

4.is和as

//如果成功了就是成功,不成功返回为空
typeA is typeB  //仅判断
typeA as typeB  //先判断,再转换

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值