C#核心知识回顾——18.值类型和引用类型的相关问题

 #region 问题一如何判断值类型和引用类型
        //F12进到类型的内部去查看
        //是class就是引用
        //是struct就是值
        #endregion

        #region 问题二语句块
        //命名空间
        //    ↓
        //类、接口、结构体
        //    ↓
        //函数、属性、索引器、运算符重载等(类、接口、结构体)
        //    ↓
        //条件分支、循环

        //上层语句块:类、结构体
        //中层语句块:函数
        //底层的语句块:条件分支循环等

        //我们的逻辑代码写在哪里?
        //函数、条件分支、循环-中底层语句块中

        //我们的变量可以申明在哪里?
        //上、中、底都能申明变量
        //上层语句块中:成员变量
        //中、底层语句块中:临时变量
        #endregion

        #region 问题三变量的生命周期
        //编程时大部分都是临时变量
        //在中底层申明的临时变量(函数、条件分支、循环语句块等)
        //语句块执行结束
        //没有被记录的对象将被回收或变成垃圾
        //值类型:被系统自动回收
        //引用类型:栈上用于存地址的房间被系统自动回收,堆中具体内容变成垃圾,待下次GC回收

        //想要不被回收或者不变垃圾
        //必须将其记录下来
        //如何记录?
        //在更高层级记录或者
        //使用静态全局变量记录
        #endregion

        #region 问题四结构体中的值和引用
        //结构体本身是值类型
        //前提:该结构体没有做为其它类的成员
        //在结构体中的值,栈中存储值具体的内容
        //在结构体中的引用,堆中存储引用具体的内容

        //引用类型始终存储在堆中
        //真正通过结构体使用其中引用类型时只是顺藤摸瓜
        #endregion

        #region 问题五类中的值和引用
        //类本身是引用类型
        //在类中的值,堆中存储具体的值
        //在类中的引用,堆中存储具体的值

        //值类型跟着大哥走,引用类型一根筋
        #endregion

        #region 问题六数组中的存储规则
        //数组本身是引用类型
        //值类型数组,堆中房间存具体内容
        //引用类型数组,堆中房间存地址
        #endregion

        # region 问题七结构体继承接口
        //利用里氏替换原则,用接口容器装载结构体存在装箱拆箱
        # endregion

你可能感兴趣的:(C#,c#,开发语言)