C#系列之值类型与引用类型2

本文详细梳理了C#中的值类型与引用类型的区别,包括如何判断类型、语句块、变量生命周期、结构体和类中的值与引用、数组的存储规则以及结构体继承接口的情况。文章强调了理解这些概念对学习C#和面试准备的重要性,并预告了后续将专门讨论排序问题。
摘要由CSDN通过智能技术生成

恭喜你已经学习到了这里,到这篇笔记C#系列就要结束了。在这段时间里,你是否完全掌握了那些大大小小的知识点呢?C#系列专栏对于C#的知识点从入门到进阶都有所讲解,有些数据结构的知识点选了一些较为重要的,较常见的问题讲解了一些篇幅,有一些排序类的问题(你可能在现阶段使用的比较少,但是当你准备面试时却不可少的内容,面试可以会出的相关排序问题)我们将额外制定C#系列之排序问题相关的专栏额外讲解,因为那些不常用的知识点最容易忘记,你可以选择面试前再去学习,或者你想要对于C#了解更加通透,你可以去订阅相关专栏了解更多内容。


这篇笔记我们将认真梳理值类型与引用类型的相关知识点。关于值类型与引用类型我们之前有所讲述,今天我们将对于一些具体的问题去讲述值类型与引用类型。

目录

问题一:如何判断值类型与引用类型?

问题二:语句块

问题三:变量的生命周期

问题四:结构体中的值和引用

问题五:类中的值和引用

问题六:数组中的存储规则

问题七:结构体继承接口


首先,我们要对于值类型与引用类型进行回顾。(你可以在心里默想相关知识点,或者翻阅C#系列值类型与引用类型了解基础知识)你需要了解的本质区别是:值的具体内容存在栈内存上,引用的具体内容存在堆内存上。

问题一:如何判断值类型与引用类型?

F12进到类型的内部去查看,如果是class类型就是引用,如果是struct类型就是值。

问题二:语句块

语句块
命名空间——
上层语句块类,接口,结构体
中层语句块函数,属性,索引器,运算符重载等等(逻辑代码的位置)
底层语句块条件分支,循环等等(逻辑代码的位置)

变量的声明:

上,中,底层都能声明变量。

上层:成员变量。

中、底层:临时变量。

问题三:变量的生命周期

编程时大部分是临时变量,在中底层声明的临时变量(函数,条件分支,循环语句块等等)。

当语句块执行结束时,没有记录的对象将被回收或者变成垃圾。

值类型:被系统自动回收。

引用类型:栈上用于存地址的房间被自动回收,堆中具体内容变成垃圾,待下次GC回收。(如果遗忘,可以回顾C#系列之垃圾回收机制)

如果你想要不被回收或者不变成垃圾,就必须将其记录下来。

如何记录呢?我们可以在更高层级记录或者使用静态全局变量记录。

问题四:结构体中的值和引用

结构体本身是值类型的前提是该结构体没有作为其他类的成员,在结构体中的值,栈中存储具体的内容。在结构体中的引用,在堆中存储引用具体内容。意思是引用类型始终存储在堆中。

问题五:类中的值和引用

类本身是引用类型,在类中的值和引用,都在堆中存储。

问题六:数组中的存储规则

数组本身是引用类型,值类型数组,堆中房间存具体内容,引用类型数组,堆中房间存地址。

问题七:结构体继承接口

利用里氏替换原则,用接口容器装结构体存在装箱拆箱。

interface ITest
{
  int Value
   {
     get;
     set;
   }
}

struct TestStruct:ITest
{
  int value;
  public int Value
  {
    get
    {
      return value;
    }
    set
    {
      this.value=value;
    }
  }
}

//实现部分(此代码有所省略)
ITest iObj1=obj1;//装箱  value 1
ITest iObj2=iObj1;
iObj2.Value=99;
TestStruct obj3=(TestStruct)iObj1;//拆箱

到了这里C#系列正式完结,感谢小伙伴们的点赞与支持。希望我的笔记能够帮助到你。C#是学习Unity的基础,我们将继续学习游戏开发的相关内容,常见问题已经写至该专栏中,一些面试可能遇到的排序问题我们将在其它专栏內讲解,一直以来我的一些演示代码是有所省略的,都是大概给大家举个例子便于理解。感谢您的关注,同时恭喜您正式完成了C#系列的学习!(撒花撒花)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Nicole Potter

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

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

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

打赏作者

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

抵扣说明:

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

余额充值