.NET 面试题整理

筅森魡賤 提交于 2019-12-01 16:23:27

1. 值类型和引用类型的区别

  1)范围:

    值类型:数值类型、bool型、结构、枚举、可空类型。

    引用类型:字符串、自定义的类、委托、数组、接口、object

  2)内存分配:

    值类型:只需要一段单独的内存,用于存放实际数据。

    引用类型:需要二段内存。

      第一段用于存放实际数据,它始终放在堆中。

      第二段用于存放数据在堆中的存放位置

  3)存储位置:

    数据不是其他类型的成员:值类型的数据或引用类型的引用存放在栈中,引用类型的数据存放在堆中。

    数据是其他类型的成员:引用类型的数据始终放在堆中,值类型的数据或引用类型的引用根据实际情况存放。

    (栈中内存是自动释放的,堆中内存是由GC来自动释放)

  4)场合:

    值类型不支持多态,引用类型支持多态。

    值类型不可以派生出新的类型,因为值类型都是密封的。引用类型可以。

    值类型不可以包含null(除外可空类型),引用类型可以。

    值类型变量的赋值--复制包含的值。引用类型变量的赋值--复制对象的引用

  5)继承:

    引用类型和值类型都继承自System.Object。

    不同的是引用类型都直接继承System.Object,而值类型继承其子类,即System.ValueType。

    关键在于ValueType重写了Equals(),从而对值类型按照实际的值比较,而不是引用地址来比较

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!