CS2L11——复杂数据类型—结构体
结构体
结构体是一种自定义变量类型 类似与枚举可以自定义
结构体是数据和函数的集合,在结构体中可以申明各种变量和方法
作用:用来表现 存在关系的数据 集合 比如用结构体表现 学生 动物 人类 等
结构体声明语法
结构体 一般写在 namespace
语句块中,关键字是 struct
1 2 3 4 5 6
| struct 自定义结构体名 { 第一部分 变量 第二部分 构造函数 第三部分 函数 }
|
注意!结构体名字 我们的规范 是 帕斯卡命名法
声明一个 Student
结构体,其中可以声明一系列变量、构造函数(方法)、函数(方法)
结构体内部的方法可以调用结构体内部声明的成员变量和成员方法
其中 public
是 访问修饰符,和结构体同名且不写返回值类型的方法 Student()
是构造函数(方法)
结构体内部的成员变量不能直接初始化!!!
变量类型可以写任意类型,包括其他结构体,但是不能是自己的结构体!
结构体内部的方法目前不加 static
关键字,这样才能通过结构体变量调用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| namespace lesson12 { struct Student { public int age; public bool sex; public int number; public string name;
public Student(int age, bool sex, int number, string name) { this.age = age; this.sex = sex; this.number = number; this.name = name; }
public void Speak() { Console.WriteLine("我的名字是{0},我今年{1}岁",name,age); } } }
|
结构体的使用
声明了结构体后,就可以 以声明出来的结构体为变量类型,声明一个对应的变量,
通过这个变量,可以调用我们在结构体内部声明的成员变量和方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| namespace lesson12 { struct Student { public int age; public bool sex; public int number; public string name;
public Student(int age, bool sex, int number, string name) { this.age = age; this.sex = sex; this.number = number; this.name = name; }
public void Speak() { Console.WriteLine("我的名字是{0},我今年{1}岁",name,age); } } }
internal class Program { static void Main(string[] args) { Student s1; s1.age = 10; s1.sex = false; s1.number = 1; s1.name = "MrTang"; s1.Speak(); } }
|
输出:
修饰结构体成员的访问修饰符
上例中的变量和方法前有 public
,这是访问修饰符,修饰结构体中变量和方法,它决定了变量或者方法是否能被外部使用
-
public
公共的 可以在结构体外部访问
-
private
私有的 只能在结构体内部使用
不写 就默认为 private
这里是修饰结构体的成员的访问修饰符,对于修饰结构体本身的访问修饰符详见 CS3L22——命名空间 的:((20240904193522-f3rq819 ‘internal’))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| struct Test { public int testPublic; bool testPrivate1; private int testPrivate2;
public void TestPublicMethod() { Test(); Console.WriteLine("这是外部可以调用的方法,testPublic = {0},testPrivate2 = {1}", testPublic, testPrivate2); }
private void Test() { Console.WriteLine("只能在结构体内部使用!"); } }
internal class Program { static void Main(string[] args) { Test t; t.testPublic = 10; t.TestPublicMethod(); } }
|
结构体的构造函数
没有返回值,必须有参数,函数名必须与结构体名相同!!!
如果申明了构造函数,那么必须在其中对结构体的所有变量数据初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| struct Student { public int age; public bool sex; public int number; public string name;
public Student(int age, bool sex, int number, string name) { this.age = age; this.sex = sex; this.number = number; this.name = name; } }
internal class Program { static void Main(string[] args) { Student s2 = new Student(18, true, 2, "小红"); s2.speak(); } }
|
输出: