4C#基本概念 本章内容ü 基本数据类型ü 操作符ü 流程控制ü 数组ü 结构、枚举类型和类ü 委托和事件本章内容不是全面介绍C#语言,而是对C#语言进行一个总结。假定读者已经对C#语言已经了解,详细的C#资料可参看微软的.NET SDK的文档。请读者原谅我加上这一章,之所以这样是因为我想对C#语言的一些功能点做一些总结,尽量以图表的方式展示这些功能点。我也买过很多书,java和.net的,很多书的前4、5章的内容基本相同,都是介绍开发语言的。我们读者哪有那么多银子区买这些重复的东西呢?4.1基本数据类型C#定义了十三种简单类型,下面的表是对这些类型做了比较。C#关键字框架类型占用字节(位)范围sbyteSystem.SByte8-128到127byteSystem.Byte80到255shortSystem.Int1616-32768到32767ushortSystem.UInt16160到65535intSystem.Int3232-2147483648到2147483647uintSystem.UInt32320到4294967295longSystem.Int6464-9223372036854775808到9223372036854775807ulongSystem.UInt64640到18446744073709551615charSystem.Char32所有Uniccode字符floatSystem.Single32约(±)1.5×10-45到7.9×3.4×1038doubleSystem.Double64约(±)5.0×10-324到7.9×10×1028decimalSystem.Decimal1288boolSystem.Boolean1true 或者false 我们通过一个例子来查看各个类型的最大最小值。Console.WriteLine("SByte:MaxValue=" + SByte.MaxValue + ",MinValue=" + SByte.MinValue);Console.WriteLine("Byte:MaxValue=" + Byte.MaxValue + ",MinValue=" + Byte.MinValue);Console.WriteLine("Int16:MaxValue=" + Int16.MaxValue + ",MinValue=" + Int16.MinValue);Console.WriteLine("UInt16:MaxValue=" + UInt16.MaxValue + ",MinValue=" + UInt16.MinValue);Console.WriteLine("Int32:MaxValue=" + Int32.MaxValue + ",MinValue=" + Int32.MinValue);Console.WriteLine("UInt32:MaxValue=" + UInt32.MaxValue + ",MinValue=" + UInt32.MinValue);Console.WriteLine("Int64:MaxValue=" + Int64.MaxValue + ",MinValue=" + Int64.MinValue);Console.WriteLine("UInt64:MaxValue=" + UInt64.MaxValue + ",MinValue=" + UInt64.MinValue);Console.WriteLine("Char:MaxValue=" + Char.MaxValue + ",MinValue=" + Char.MinValue);Console.WriteLine("Char:MaxValue=" + Char.MaxValue + ",MinValue=" + Char.MinValue;Console.WriteLine("Single:MaxValue=" + Single.MaxValue + ",MinValue=" + Single.MinValue);Console.WriteLine("Double:MaxValue=" + Double.MaxValue + ",MinValue=" + Double.MinValue);Console.WriteLine("Decimal:MaxValue=" + Decimal.MaxValue + ",MinValue=" + Decimal.MinValue); Console.WriteLine("Boolean:TruString=" + Boolean.TrueString + ",FalseString=" + Boolean.FalseString);运行此程序,显示结果如下:据Mono文档介绍,Char类型的最大值为65535,最小值为0。不过这里显示是乱码。这是因为这两个值的类型都是char。我们可以通过下面的代码片段将其转换成double,终端中将显示最大值65535和最小值0:double maxValue = Convert.ToInt32(Char.MaxValue);double maxValue = Convert.ToInt32(Char.MinValue);Consloe.WriteLine(“Char:MaxValue=” +maxValue + “,MinValue=” + minValue); 这13种类型都是值类型,值类型和引用类型的区别在下面介绍。这里如何区分值类型和引用类型呢? 区分值类型和引用类型是相当重要的,尤其在对方法的参数进行判断的时候很容易出错。值类型都继承于System.ValueType和它的子类,如结构类型和枚举类型。 考虑下面的一个例子。using System;public class ValueandRef{ public class Person { public string name; public int age; public Person() { } public Person(string p1,int p2) { name=p1; age=p2; } } //引用类型 Person person = new Person("xuwen",32); //值类型 int salary = 12000; //打印person和salary的值 public void PrintInfo() { Console.WriteLine(person.name + "'s age:" + person.age); Console.WriteLine(person.name + "'s salary:" + salary); } //更改数值,p1参数是引用类型,p2参数是值类型 public void ChangedValue(Person p1,int p2) { //这里p1设置为新对象,p1的地址不再指向person,而是指向了一个新的Person。 p1 = new Person(); p1.name ="yuer"; //这里对值的修改只影响新的对象的值,person的值不被修改 p1.age = 23; p2 = 5400;//值类型,这里的修改不会影响salary } public void ChangedValueTwo(Person p1,int p2) { p1.name = "hutu"; //这里p1和person是同一对象 p1.age =27; p2 = 7200; //值对象,这里的修改不会影响salary } public void Test() { Console.WriteLine("PrintInfo:Before the