C# Array数组是引用类型

在C#中值类型都是由System.ValueType的直接派生类,System.ValueType本身又是直接从System.Object派生的。派生的意思是‘利用继承机制,新的类可以从已有的类中生出来‘。简单点就是‘粑粑生娃’。有时是‘爷爷生娃‘例如:枚举都从System.Enum抽象类派生,而后者又从System.ValueType派生。值类型的基类是:System.ValueType,而引用类型的基类是System.Object

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace TestArrayList
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             //System.Array
13             //1、数组[]特定类型、固定长度
14             //2、探讨system.Array与数组的关系
15             //3、证明数组是引用类型
16             string[] str1 = new string[3];
17             System.Array array =new string[3];
18             str1[0] = "a";
19             str1[1] = "b";
20             str1[2] = "c";
21 
22             array = str1;
23             Console.WriteLine(str1[2]);
24             Console.WriteLine(array.GetValue(2));
25 
26             string[] str2 = new string[3];
27             System.Array array2 = new string[3];
28             string d ="d";
29             string e ="e";
30             string f ="f";
31             array2.SetValue(d,0);
32             array2.SetValue(e, 1);
33             array2.SetValue(f, 2);
34             //强制类型装换 装箱
35             str2 =(string[])array2;
36 
37             Console.WriteLine(str2[2]);
38             Console.WriteLine(array2.GetValue(2));
39             //通过IsValueType方法判断
40             bool ArrayType = str1.GetType().IsValueType;
41             Console.WriteLine(ArrayType);
42 
43             Type arryaTypeT = str1.GetType();
44             Console.WriteLine(arryaTypeT.ToString());
45             //通过GetType方法得到类型
46             string ArrayType2 = typeof(string[]).ToString();
47             Console.WriteLine(ArrayType2);
48             Console.ReadKey();
49         }
50     }
51 }


通过对象彼此赋值发现System.Array对string类型的数组可直接接受赋值,其实System.Array是所有数组的‘粑粑’,具体的数组都是通过它隐式派生来的。运行结果如下

小结:数组是派生自System.ValueType的一种引用类型的数据结构

posted @ 2019-04-16 14:07  熊木匠  阅读(4571)  评论(0编辑  收藏  举报