数据结构
枚举(Enumerations)
枚举是一种数据类型,它通过为一组项中的每一项分配标识符(名称)来枚举它们,同时公开用于对枚举元素进行排序的底层基类型(underlying base type)。默认情况下,底层类型为 int,也可以是除 char 之外的任何一种整数类型。
一个枚举的声明如下:
enum Weekday { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
上述枚举中的元素可以作为常量使用:
Weekday day = Weekday.Monday;
if (day == Weekday.Tuesday)
{
Console.WriteLine("Time sure flies by when you program in C#!");
}
可以为枚举项分配具体值:
enum Age {Infant = 0, Teenager = 13, Adult = 18};
Age myAge = Age.Teenager;
Console.WriteLine("You become a teenager at the age of {0}", (int)myAge);
若未分类具体值,则按照定义枚举项的顺序,从0开始分配连续的整数值。
有时候可能想要创建除了 int 基类型的枚举,可以在枚举名称之后指定任何整数类数据类型(除了 char ),例如:
enum CardSuit : byte {Hearts, Diamonds, Spades, Clubs}
结构体(Structs)
结构体是轻量级对象。它主要用于值类型变量集合只需要一个数据容器的情况。结构体与类的相似之处在于,它们都有构造函数、方法,甚至可以实现接口,但也有重要的区别:
- 结构体是值类型,而类是引用类型,这意味着他们作为参数被传入函数时的行为不一样
- 结构体不支持继承,虽然结构体的使用可能受到限制,但如果使用得当,它们所需的内存更少
- 结构体总是存在构造器(constructor),即使你不使用它。而类允许你通过使用“private”修饰符隐藏构造器
一个结构体的声明如下:
struct Person
{
public string name;
public System.DateTime birthDate;
public int heightInCm;
public int weightInKg;
}
结构体 Person 可以这样使用:
Person dana = new Person();
dana.name = "Dana Developer";
dana.birthData = new DataTime(1974, 7, 18);
dana.heightInCm = 178;
dana.weightInKg = 50;
if (dana.birthData < DataTime.Now)
{
Console.WriteLine("Thank goodness! Dana Developer isn't from the furture!");
}
提供一个构造器可以简化结构体的实例化:
using System;
struct Person
{
string name;
DateTime birthData;
int heightInCm;
int weightInKg;
public Person(string name, DateTime birthDate, int heightInCm, int weightInKg)
{
this.name = name;
this.birthDate = birthData;
this.heightInCm = heightInCm;
this.weightInKg = weightInKg;
}
}
public class StructWikiBookSample
{
public static void Main()
{
Person dana = new Person("Dana Developer", new DateTime(1974, 7, 18), 197, 50);
}
}
这里还有一种实例化结构体的替代语法:
struct Person
{
public string Name;
public int Height;
public string Occupation;
}
public class StructWikiBookSample2
{
public static void Main()
{
Person john = new Person
{
Name = "John",
Height = 182,
Occupation = "Programmer"
};
}
}
结构体实际上只在出于性能考虑的情况下使用,当总数据量少于16字节时,结构体的性能表现最好,如果不清楚这一点,请使用类。
数组(Arrays)
数组是同属于相同类型的项目的集合。使用变量或者常量声明数组的长度,数组在声明之后就拥有固定的长度,且无法修改这一长度。
// 一个使用常量定义其长度的数组
int[] integers = new int[20];
int length = 0;
System.Console.Write("How long should the array be? ");
length = int.Parse(System.Console.ReadLine());
// 一个使用变量定义其长度的数组
// 这个数组在声明之后仍然无法改变其长度
double[] doubles = new double[length];