数据类型
C#中有两种类型:引用类型和值类型
引用类型的变量存储是对其数据(对象)的引用,而值类型的变量直接包含其数据
对于引用类型,两种变量可引用同一对象;因此,对一个变量执行的操作会影响另一个变量所引用的变量。
对于值类型,每个变量都具有其自己的数据副本,对一个变量执行的操作不会影响另一个变量(ref和out参数变量除外)。
例子:
1 using System;
2
3 namespace ConsoleApplication1
4 {
5 class Program
6 {
7 static void Main(string[] args)
8 {
9 //引用类型
10 int[] a = { 1, 2 };
11 int[] b = a;
12 Console.WriteLine(a[0]); //1
13
14 b[0] = 3;
15 Console.WriteLine(b[0]); //3
16
17 //值类型
18 int c = 5;
19 int d = c;
20 Console.WriteLine(c); //5
21
22 d = 7;
23 Console.WriteLine(c); //5
24 Console.ReadKey();
25 }
26 }
27 }
数组是引用类型,当数组b引用数组a后,对b的任何操作都相当于对a进行操作。
int是值类型,当把变量c赋值给变量d后,对d的任何操作都不会影响到c。
装箱与拆箱
object类型:
类型在.NET Framework中是Object的别名。在C#的同一类型系统中,所有类型(引用类型和值类型)都是直接或间接从Object继承的。可以将任何类型的值赋给object类型的变量
装箱:将值类型转换为引用类型
拆箱:将引用类型转换为值类型
利用装箱拆箱功能,可通过允许值类型的任意类型与Object类型的值互相转换,将值类型与引用类型连接起来。
装箱操作:
int val = 100; //值类型 object obj = val; //隐式转换成引用类型 Console.WriteLine("对象的值=" + obj); //对象的值=100
拆箱操作:
int val = 100; //值类型 object obj = val; //转换成引用类型 int num = (int) obj; //强制转换成值类型 Console.WriteLine("num=" + num); //num=100