14-结构的定义和使用
9.4.1 结构的定义和使用
在C#中,可以将结构看成轻量级的类。定义结构和定义类相似,采用struct进行定义,每个struct类型数据可以是常量、变量、构造函数、方法和属性等成员。
定义结构的语法如下。
<访问修饰符> struct 结构名
{
//结构体定义
}
使用结构通过声明结构体变量或使用new来实例化结构对象,然后通过“结构体变量.结构成员名”或“结构对象.结构成员”的方式来使用结构。
【范例9-5】 定义表示学生信息的结构Student并使用。
(1)在Visual Studio 2013中新建C#控制台程序,项目名称为“StructDemo”,在自动生成的Program类的后面定义Student结构,注意Student结构和Program类二者是并列的,不能嵌套。输入如下代码(代码9-5-1.txt)。
01 struct Student //定义结构Student
02 { //结构的成员变量
03 public String stuNum; //定义结构成员表示学生学号
04 public String stuName; //定义结构成员表示学生姓名
05 public int stuAge; //定义结构成员表示学生年龄
06 public int stuClass; //定义结构成员表示学生班级
07 public int stuGrade; //定义结构成员表示学生年级
08 public Student(string stuNum, string stuName, int stuAge, int stuClass,int stuGrade)
09 { //结构的构造函数,用参数给结构中的成员赋值
10 this.stuNum = stuNum; //将参数stuNum赋给this.stuNum
11 this.stuName = stuName; //将参数stuName赋给this.stuName
12 this.stuAge = stuAge; //将参数stuAge赋给this.stuAge
13 this.stuClass = stuClass; //将参数stuClass赋给this.stuClass
14 this.stuGrade = stuGrade; //将参数stuGrade赋给this.stuGrade
15 }
16 public void DoHomework() //结构中的方法
17 }
18 //结构中的方法
19 }
20 }
**注意** 结构中只能定义有参数的构造函数,对数据字段不能赋初值,否则会出错。
(2)在Program.cs的Main方法中输入以下代码以测试类的成员(拓展代码9-5-2.txt)。
01 Student goodStu; //创建结构goodStu表示好学生
02 goodStu.stuNum="20050901012"; //给结构中的成员stuNum赋值
03 goodStu.stuName = "Anderson"; //给结构中的成员StuName赋值
04 goodStu.stuAge = 19; //给结构中的成员stuAge赋值
05 goodStu.stuClass = 1; //给结构中的成员StuClass赋值
06 goodStu.stuGrade = 1; //给结构中的成员stuGrade赋值
07 Console.WriteLine("结构演示:");
08 Console.WriteLine("三好学生:学号-{0},姓名-{1},年龄-{2},班级-{3}", goodStu.stuNum, goodStu.
stuName , goodStu.stuAge , goodStu.stuClass); //输出结构中成员的值
09 goodStu.DoHomework(); //调用结构的方法
10 Student normalStu = new Student("20050901018", "Bliss", 18, 1, 1);
//使用new来实例化结构对象方式创建结构
11 Console.WriteLine("普通学生:学号-{0},姓名-{1},年龄-{2},班级-{3}", normalStu.stuNum,
normalStu.stuName , normalStu.stuAge , normalStu.stuClass);
12 goodStu.DoHomework(); //调用结构的方法
【运行结果】
单击工具栏中的 按钮,即可在控制台中输出如下图所示的结果。
【范例分析】
在这个实例中声明了结构Student,它有5个变量成员,一个有参数的构造函数和一个DoHomework方法。在上面给出的Main方法中,代码第1行和第10行分别代表两种创建结构对象变量的方法。
【拓展训练】
把【范例9-5】中的结构体Student改为类,以实现同样的功能(拓展代码9-5-3.txt)。
改为类后,要添加一个无参数构造函数,goodStu的创建改为使用new。
Student goodStu = new Student() ; //创建对象
运行结果和原来的一样。