C#和.NET Framework还允许用户根据这些简单的类型定义复合类型。
n 值类型
可以定义两种类型:结构(struct)和枚举(enum) ü 结构 在C#中,结构是一种特殊的类,它是值类型,而不是引用类型。因为结构是在堆栈上(结构的实例占用了堆栈的空间),所以创建和复制它的效率比类略高。但是结构他不支持继承。 堆栈分配的类型比堆式(堆积)分配的类型的好处? 1. 堆栈或值类型的空间分配比堆式(堆积)分配类型更快。 2. 在堆栈中的值用完后,会立即自动解除分配。 3. 很容易把一个值类型变量的值复制到另一个值类型的变量中,方法是使用等号。 ü 枚举 枚举是用户自定义的整数类型。在声明时,要指定该枚举可以包含的一组可接受的实例值。不仅如此,还可以给值指定易于记忆的名称。如果在代码的某个地方,要试图把一个不在可接受组值范围内的值赋予枚举的一个实例,编译器就会报告一个错误,且枚举不支持继承。 使用枚举比使用无格式的整数的好处? 1. 枚举可以使代码易于维护,有助于确保给变量指定合法的期望值。 2. 枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。 3. 枚举使代码更易于键入。 枚举的语法: <modifiers>enum<enum_name>:integer_type { nameN=valueN } 访问枚举元素的方式和访问静态字段的方式相似,枚举的名称、一个句点和字段名称。也可以声明个枚举类型的变量,在条件语句不能使用枚举元素直接和一个基本数据类型比较。若要比较需先将类型强制转换。 Enum类的方法: System.Enum类为操作枚举提供了许多静态便利的方法,可以用这些方法访问枚举元素的名称或值,确定枚举中是否存在一个值,格式化枚举值,或者把值转换为枚举类型。System.Enum类还重写了ToString()方法,它返回枚举实例的一个字行串表示。 Public static string GetName(Type enumType,object value) Public static string[]GetNames(Type enumType) Public static Type GetUnderlyingType(Type enumType) Public static Array GetValues(Type enumType) Public Static bool IsDefined(Type enumType,object value) System.Enum类中定义的一些方法
n 引用类型
C#支持的用户自定义复合类型的引用类型包括: ü 类 类在C#和.NET Framework中是基本的用户定义类型。几乎所用的C#可执行文件都至少有一个类(理论上可以使用结构来代替),其中包含Main方法(程序的入口)。类是一种复合的数据类型,包括数据成员(字段,常量和事件)和函数(主要是方法和属性,但也包含运算符等)。换言之,类封装了数据以及访问和操作这些数据的功能。 ü 接口 接口用于为实现它们的类定义功能。它们包含属性、方法、事件和索引符等,但接口不能被实例化,也没有定义这些函数的执行方法。例如,如果接口包含一个方法,它将定义方法的返回类型和参数,但不包含执行该方法的任何代码。执行这个接口的任何类都需要提供该方法的执行方式。 ü 委托 委托是指引用方法的类型,委托允许确定运行时要调用哪些方法。 ü 数组 数组是包含相同数据类型无素的一种数据结构。数组的无素通过一个整型的下标值访问。在C#中,第一个元素的下标是0。 1、 创建一维数组的语法: type[]arrayName=new type[length]; OR type[]arrayName; arrayName=new type[length]; 2、 创建多维组的语法: type[,]arrayName=new type[numRows,numCols]; OR type[,,]arrayName=new type[dim1,dim2,dim3]; 3、 要创建一个行数固定,列数可变的二维锯齿形数组(正交数组或jagged数组)即是每一行有不同的列。 Type[][]arrayName=new type[numRows][];//如: int[][]a = new int[3][]; a[0]=new int[4]; a[1]=new int[2]; a[2]=new int[1]; 说个数组说明,整数型数组a共有三行(a[0],a[1],a[2])但是各列却不同,a[0]这一行有4列(a[0]= new int[4])。 访问数组元素的方法应声明时的格式而定,如: value=arrayName[]; value=arrayName[row,column]; vale=arrayName[row][column]; 4、 数组的属性和方法 C#中,Array类是所有数组的基类(父类),因此所有数组都可以使用在System.Array类中定义的属性和方法。例如: Rank属性返回数组的维数; Length属性返回数组元素的总数; Reverse()方法反转数组元素的顺序; Sort()方法按字母顺序或其它算法排列元素; Clear()方法把值类型的数组的一个或多个元素设为0,把引用类型的元素设为空。(可查看系统类的介绍) |
|
来自: Frank_Chia > 《.NET》