枚举类型
如果一个变量只有几种可能的取值,可以使用枚举类型来定义。枚举类型属于用户自定义数据类型。所谓“枚举”是指将变量所有可能的取值一一列举出来,变量的取值只限于列举出来的常量。
1.枚举值在运行时是常量,可以作为case的条件等待。
2.枚举值可以指定对应的整数数据类型。
3.所有的枚举都隐式继承自System.Enum抽象类
4.枚举值赋值的时候需要避免循环引用的情况。
5.枚举值可以转换成整数。
枚举类型的声明
enum 枚举类型名 {枚举常量1,枚举常量2,...枚举常量n};
例如:enum weekday{ SUN,MON,TUE,WED,THU,FRI,SAT};
定义了7个枚举常量以及枚举类型weekday。枚举常量具有默认的证书与之对应:SUN的值为0、MON的值为1、TUN的值为2、...SAT的值为6。
enum city{Beijing,Shanghai,Tianjin=5,Chongqing};
枚举常量Beijing的值为0,Shanghai的值为1,Tianjin的值指定为5.对于指定值后面的没有指定值的枚举常量,编译器会将前一个常量值加1(下一个整数)赋给它,所以Chongqing的值为6。
输入城市代号,输出城市名称:
C#的结构是一个关系重大的语言功能。和类一样,结构也可以包含其他类型。由于结构在内部是值类型的,所以结构有时也被称为类的轻型版本。同时,结构不承担引用对象所带来的开销,除非在对其装箱时例外。结构也有其重要的限制,所以导致他只能用于非常特殊的场合。
1.结构的搞糟函数必须有参数。
2.结构的构造函数必须确保对结构内所有的字段赋值,字段在定义时不允许赋初始值。
3.结构不允许继承结构,但是可以实现一个或多个接口。
4.结构当中可以写方法、属性、字段、构造函数、常量。
5.结构当中没有析构函数。
6.结构的访问修饰符在namespace下定义时只允许使用public,在类内部可以使用private,protected等。
定义结构类型的格式如下:
struct 结构类型名
{
数据类型1 成员名1;
数据类型2 成员名2;
...
数据类型n 成员名n;
};
例如下面定义了一个学生信息的结构类型:
学生成绩排序,结构数组应用
枚举是值类型,它是一组已命名的数值常量,它有助于定义具有一组特定值的数据类型,主要总结为:确定并有限,不会出现非安全值。
结构也是值类型,当显示的定义带参的构造函数时,默认的无参构造函数依然存在,结构不能继承,但可实现接口。
如果一个变量只有几种可能的取值,可以使用枚举类型来定义。枚举类型属于用户自定义数据类型。所谓“枚举”是指将变量所有可能的取值一一列举出来,变量的取值只限于列举出来的常量。
1.枚举值在运行时是常量,可以作为case的条件等待。
2.枚举值可以指定对应的整数数据类型。
3.所有的枚举都隐式继承自System.Enum抽象类
4.枚举值赋值的时候需要避免循环引用的情况。
5.枚举值可以转换成整数。
枚举类型的声明
enum 枚举类型名 {枚举常量1,枚举常量2,...枚举常量n};
例如:enum weekday{ SUN,MON,TUE,WED,THU,FRI,SAT};
定义了7个枚举常量以及枚举类型weekday。枚举常量具有默认的证书与之对应:SUN的值为0、MON的值为1、TUN的值为2、...SAT的值为6。
enum city{Beijing,Shanghai,Tianjin=5,Chongqing};
枚举常量Beijing的值为0,Shanghai的值为1,Tianjin的值指定为5.对于指定值后面的没有指定值的枚举常量,编译器会将前一个常量值加1(下一个整数)赋给它,所以Chongqing的值为6。
输入城市代号,输出城市名称:
namespace 枚举
{
enum city
{
Beijing, Shanghai, Tianjin = 5, Chongqing
}
class Program
{
static void Main(string[] args)
{
city n;
Console.WriteLine("Input a city number({0} to exit):", (byte)city.Beijing - 1);
n = (city)Convert.ToByte(Console.ReadLine());
while (n >= city.Beijing)
{
switch (n)
{
case city.Beijing:
Console.WriteLine("Beijing");
break;
case city.Shanghai:
Console.WriteLine("Shanghai");
break;
case city.Tianjin:
Console.WriteLine("Tianjin");
break;
case city.Chongqing:
Console.WriteLine("Chongqing");
break;
default:
Console.WriteLine("Invalid city number!");
break;
}
n = (city)Convert.ToByte(Console.ReadLine());
}
}
}
}
运行结果:
C#的结构是一个关系重大的语言功能。和类一样,结构也可以包含其他类型。由于结构在内部是值类型的,所以结构有时也被称为类的轻型版本。同时,结构不承担引用对象所带来的开销,除非在对其装箱时例外。结构也有其重要的限制,所以导致他只能用于非常特殊的场合。
1.结构的搞糟函数必须有参数。
2.结构的构造函数必须确保对结构内所有的字段赋值,字段在定义时不允许赋初始值。
3.结构不允许继承结构,但是可以实现一个或多个接口。
4.结构当中可以写方法、属性、字段、构造函数、常量。
5.结构当中没有析构函数。
6.结构的访问修饰符在namespace下定义时只允许使用public,在类内部可以使用private,protected等。
定义结构类型的格式如下:
struct 结构类型名
{
数据类型1 成员名1;
数据类型2 成员名2;
...
数据类型n 成员名n;
};
例如下面定义了一个学生信息的结构类型:
enum gender
{
man, ferman
}
struct student
{
public long no, birthday; //学号,生日
public char name; //姓名
public gender sex; //性别
public float score; //成绩
}
学生成绩排序,结构数组应用
namespace 结构
{
struct student //学生结构类型
{
public string name;
public double score;
}
class Program
{
static void Main(string[] args)
{
student[] s = new student[5];
//为学生结构数组赋值
for (int i=0;i<s.Length;i++)
{
s[i].name = Convert.ToString(Console.ReadLine());
s[i].score = Convert.ToDouble(Console.ReadLine());
}
//根据学生的成绩排序
for (int i=0;i<s.Length;i++)
{
for (int j=i+1;j<s.Length;j++)
{
if (s[i].score<s[j].score)
{
student t;
t = s[i]; //交换数组元素
s[i] = s[j];
s[j] = t;
}
}
}
//依次输出数组元素
for (int i=0;i<s.Length;i++)
{
Console.WriteLine("{0} {1}", s[i].name, s[i].score);
}
}
}
}
运行结果:
枚举是值类型,它是一组已命名的数值常量,它有助于定义具有一组特定值的数据类型,主要总结为:确定并有限,不会出现非安全值。
结构也是值类型,当显示的定义带参的构造函数时,默认的无参构造函数依然存在,结构不能继承,但可实现接口。