结构和枚举
- 结构
- 结构的声明和调用
- 声明
- 调用
- 结构:结构的成员
- 枚举
- 枚举的使用
- 枚举:Flags枚举
结构
-
轻量级的类,与类很相似,均为包含数据成员和函数成员的数据结构
-
结构与类的区别
-
结构是值类型且被称为具有值语义;而类是引用类型且被称为具有引用语义
-
结构不像类那样存在继承,所有结构都直接继承自 System.ValueType
-
结构类型永远不会是抽象的,并且始终是隐式密封的
-
与类不同,结构不允许声明无形参实例构造函数;每个结构隐式地具有一个无形参实例构造函数,始终返回相同的值;可以声明具有形参的实例构造函数
-
在结构中不允许声明析构函数
结构的声明和调用
声明
[特性]
[结构修饰符][partial] struct 结构名 [类型形参] [: 基接口[类型形参约束]]
{
结构体
}[;]
调用
结构名 结构变量名= new结构名 ([参数表]);
结构名 结构变量名;
public struct Point // 平面坐标点
{
public int x, y;
public Point(int x, int y) //有2个参数的构造函数
{
this.x = x; this.y = y;
}
}
class PointTest
{
static void Main()
{
Point p1 = new Point (); //调用默认构造函数
Console.WriteLine("平面坐标 1: x = {0}, y = {1}", p1.x, p1.y);
Point p2 = new Point(10, 10); //调用有2个参数的构造函数
Console.WriteLine("平面坐标 2: x = {0}, y = {1}", p2.x, p2.y);
Point p3;
//Console.WriteLine("平面坐标3: x = {0}, y = {1}", p3.x, p3.y);//编译错误
p3.x = 22; p3.y = 33;
Console.WriteLine("平面坐标 3: x = {0}, y = {1}", p3.x, p3.y);
}
}
结构:结构的成员
-
常量、字段、方法、属性、事件、索引器、运算符重载、带参数构造函数、嵌套结构(例10.2)等
-
结构不支持继承,结构成员的声明可访问性不能是protected或protected internal,函数成员不能是abstract或virtual
-
结构不能声明默认构造函数(没有参数的构造函数)或析构函数
-
实例字段声明中不允许含有变量初始值设定项,但静态字段可以
枚举
是值类型的一种特殊形式,用于声明一组命名的常量
可以将基础类型的值分配给枚举,反之亦然
枚举的使用
enum Color { Red, Green, Blue }
Color color1 = Color.Blue;
if (color1 == Color.Red) { Console.WriteLine("color1 is red"); }
else { Console.WriteLine("color1 is not red"); }
Color color2 = Color.Red;
switch (color2)
{
case Color.Red:
Console.WriteLine("color2 is red"); break;
case Color.Green:
Console.WriteLine("color2 is green"); break;
case Color.Blue:
Console.WriteLine("color2 is blue"); break;
}
Console.WriteLine("Color.Green = {0}", Color.Green);
Console.WriteLine("Color.Green = {0}", (int)Color.Green);
枚举:Flags枚举
-
如果要表示复合状态,即对应枚举中的多个变量,则可以使用[Flags]特性标记
-
使用[Flags]特性标记的枚举,可以将枚举作为位域(即一组标志)处理,其成员常量对应于整数的不同位,例如:0x01、0x02、0x04、0x08等
enum Days {Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
enum BoilingPoints {Celcius = 100, Fahrenheit = 212};//沸点的摄氏和华氏温度
[FlagsAttribute]
enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 }; //4种颜色
public static void Main()
{
Type weekdays = typeof(Days); Type boiling = typeof(BoilingPoints);
Console.WriteLine("一周7天,对应于枚举类型Days中的值:");
foreach (string s in Enum.GetNames(weekdays))
Console.Write("{0}={1} ", s, Enum.Format(weekdays, Enum.Parse(weekdays, s), "d"));
Console.WriteLine("\n枚举类型BoilingPoints定义了如下值项:");
foreach (string s in Enum.GetNames(boiling))
Console.Write("{0}={1} ", s, Enum.Format(boiling, Enum.Parse(boiling, s), "d"));
Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;
Console.WriteLine("\n枚举变量myColors存放如下颜色的组合:{0}", myColors);
Console.ReadKey();
}