C#数据类型
一。
值类型和引用类型.
C#常用数据类型
java C#
整形 int int
浮点型 float float
双精度行 double double
字符串 Strinng string
布尔类 boolean bool
枚举类 enum enum
--值类型
源于System.ValueType家族,每个值类型的对象都有一个独立的内存区域用于保存自己的值,值类型数据所在的内存区域称为栈(Stack)。
只要在代码中修改它,就会在它的内存区域保存这个值。
小结
对值类型,不同的变量会分配不同的存储空间,并且存储空间中的存储的是改变量的值。赋值操作传递值的是变量的值,改变一个变量的值不会影响另一个变量的值。
--应用类型
源于System.Object家族在C#中引用类型主要包括数值,类的接口等。
示例--
1 class program 2 { 3 static void Main(string [] args) 4 { 5 int [] infozhang =new int [] {170,60}; //张浩的身高和体重信息 6 int [] infoli=infozhang; //数值引用赋值 7 Console.WritLine("去年--张浩的身高{0},体重{1}",infozhong[0],infozhong[1]); 8 Console.WritLine("去年--李明的身高{0},体重{1}",infoli[0],infoli[1]); 9 infoli[0]=180; 10 infoli[1]=70; 11 Console.WritLine("今年--张浩的身高{0},体重{1}",infozhong[0],infozhong[1]); 12 Console.WritLine("今年--李明的身高{0},体重{1}",infoli[0],infoli[1]); 13 Console.ReadLine(); 14 } 15 }
小结
对引用类型,赋值是把原对象的引用传递给另一个引用,对数组而言,当一个数组引用赋值给另另一个数组引用后,这两个引用指向同一个数组,也就是同一个存储空间。
--示例
class Program { static void Main(string[] args) { int[] infozhang = new int[] { 170,60}; int[] infoli = new int[2]; Console.WriteLine("复制前的--黎明身高{0},体重{1}",infoli[0],infoli[1]); //数组复制 for (int i = 0; i < infozhang.LongLength;i++ ) { infoli[i] = infozhang[i]; } Console.WriteLine("去年的--张浩身高{0},体重{1},黎明{2},黎{3}",infozhang[0], infozhang[1], infoli[0], infoli[1]); infoli[0] = 180; //今年的身高变成180 infoli[1] = 70; //今年的体重变成70 Console.WriteLine("今年的--张浩身高{0},体重{1},黎明{2},黎明{3}", infozhang[0], infozhang[1], infoli[0], infoli[1]); Console.ReadLine(); } }
数组复制可以利用循环实现,对于两个数组arry1和arry2(arry2的长度不小于arry1的长度)将数组arry1中元素的值复制到arry2中。
--细分值类型和引用类型
值类型--
基本数据类型:int 长度型:long 浮点型: float double char bool
枚举类:enum
结构类:struct
引用类型--
类:基类:System.Object 字符串:string 自定义类:class
接口:interface
数组:int [] ,string[]
---结构
定义:
访问修饰符 struct 结构名
{
//结构体
}
结构的定义有以下特点
--结构中可以有字段,也可以有数据
--定义时,结构中的字段不能被赋初值
结构的使用
可以不用new 直接定义对象即可
声明结构对象后,必须给结构的成员赋初值
-------装箱和拆箱
class Program { static void Main(string[] args) { int i=123; object o=i; //装箱 i=456; //改变i的内容 Console.WriteLine("值类型的值{0}",i); Console.WriteLine("引用类型的值{0}",o); int i=123; object o=i; //装箱 int t=(int)o; //拆箱 } }
--不同类型的参数传递
使用值传递,在方法中对参数的更改在调用后不能保留。
使用ref方式传递,可以保留对参数值的更改。
---值方式参数传递和引用方式传递
使用值方式(不用ref修饰)传递值类型参数时,参数在方法中的修改不会保留。
使用值方式(不用ref修饰)引用类型参数时,参数在方法中的修改会保留。
使用引用方式(不用ref修饰)传递值类型和引用类型参数时,参数在方法中的修改都会保留。