首页 > 其他 > 详细

Int[]是引用类型还是值类型

时间:2014-08-13 21:29:57      阅读:404      评论:0      收藏:0      [点我收藏+]

分析问题

  .NET所有数据都以类型的方式表示,数组也不例外。存储不同类型项目的数组都是一个类型,.NET会自动地为数组生成新的类型。例如下列申明:

DateTime[] times;

  CLR就会在运行时创建一个DateTime[]类型,所以数组类型可以说是一个类型族,而它们的共性就是所有的数组类型继承自System.Array,这种设计方式和委托非常类似,委托的概念将在后面的章节有所覆盖。System.Array实现了多个接口,并且直接继承自System.Object,从中可以得出结论:所有的数组类型都是引用类型。

  无论是存储值类型对象的数组,还是存储引用类型对象的数组,其本身类型都是引用类型,而它们的内存也就都是分配在堆上的。不同之处在于,存储值类型对象的数组,所有项目的值就已经包含在数组内,而存储引用类型对象的数组,它的项目也就是引用,具体的对象实例将位于堆上其他位置,或者根本还未分配。下图展示了两者内存的分配情况。

bubuko.com,布布扣

  .NET数组和传统C++中的数组是有区别的,最显著的一点差别就是在.NET中,任何数据类型的数组本身就是一个类型,而这个类型保证了数组使用的安全性。例如有过C++经验的程序员都遇到过数组越界的问题,而在.NET中这样的问题被彻底解决,CLR会检测所有对数组的访问,任何试图访问数组边界以外的代码都会产生一个IndexOutOfRangeException异常。

答案

  数组类型是一族类型,它们都继承自System.Array,而System.Array又继承自System.Object。所有的数组类型都是引用类型。

 

Int[]是引用类型还是值类型,布布扣,bubuko.com

Int[]是引用类型还是值类型

原文:http://www.cnblogs.com/wangjinpeng-study/p/3910698.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!