结构体
一种数据结构,包括数据成员和方法成员。通过结构体一次性声明多个不同类型的变量。
1.结构是值类型,它在栈中分配空间;而类是引用类型,在堆中分配空间,栈中保存的是引用
2.结构类型存储的是成员数据,位于栈中的变量保存的是指向堆中数据对象的引用
Public struct 结构名{字段、属性、方法、事件}
枚举
一种值类型,一个由指定常量集合组成的数据类型。枚举声明可以显式地声明byte、short、ushort、sbyte、int、uint、long、ulong作为对应的基础类型。
1.枚举使用关键字enum关键字声明。
2.枚举本身可以有修饰符,但枚举的成员始终是公众的,仅能使用Public和Internal
3.枚举类型中声明的第一个枚举成员的默认值为零,允许多个枚举成员有相同的值,没有显示赋值的枚举成员的值,总是前一个枚举成员的值+1.枚举值为常量,不是变量
enum student{a,b,c,d}
int=student.a
集合
区别 |
数组 |
集合 |
容量 |
创建时需要指定数组变量的大小 |
默认初始容量为0,大小可按动态增加 |
访问 |
连续存储,可以快速地遍历元素。一次性声明多个相同类型的变量 |
使用整数索引可以访问集合中的元素,随意地添加、插入或移除某一范围元素,始终保持元素的连续性 |
存储 |
同一类型的数据,连续存储 |
可以不是一种,不加泛型时添加的类型时Object |
缺点 |
数组长度固定,插入、移除非常麻烦, |
类型不安全,容易出现类型不匹配的错误,装箱拆箱会到来性能损耗 |
List是接口,特性是有序且允许元素重复,ArrayList是它的实现类。
泛型
泛型时具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其子段的类型和其方法的参数类型出现。
IList<Animal>arrayAnimal;//声明一泛型集合变量,用接口IList。IList<Animal>表示此集合变量只能接受Animal类型。
arrayAnimal=new List<Animal>();//实例化List对象
注:<T>需要指定的集合的数据或对象类型
List和ArrayLIst在功能上是一样的,不同在于,List在声明和实例化时都需要指定其内部项的数据或对象类型,可以避免类型安全问题和装箱拆箱的问题。