关于结构体
一.基本概念
结构体是一种自定义变量类型,类似枚举需要自己定义,它是数据和函数的集合。
在结构体中,可以申明各种变量和方法。
作用:用来表现存在关系的数据集合,比如用结构体表现学生,动物,人类等等。
二.基本语法
结构体一般写在namespace语句块中,结构体关键字struct。
(和枚举enum一样)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| namespace Lesson1 { struct 自定义结构体名 { } internal class Program { static void Main(string[] args) { } } }
|
注意:结构体名字我们的规范是帕斯卡命名法。(所有单词首字母大写)
三.实例
表现学生数据的结构体
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
| namespace Lesson1 { struct Student { int age; bool sex; int number string name; void Speak(){ Console.WriteLine("我的名字是{0},我今年{1}岁,",name,age); } } internal class Program { static void Main(string[] args) { } } }
|
四.结构体的使用
使用要在函数里面使用
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
| namespace Lesson1 { struct Student { public int age; public bool sex; public int number public string 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="大帅哥"; s1.Speak(); } } }
|
五.访问修饰符
修饰结构体中的变量和方法,是否能够被外部使用
public 公共的,可以被外部访问
private 私有的,只能在内容中使用
默认不写,则为private
六.结构体的构造函数
基本概念
1.没有返回值
2.函数名必须和结构体名相同
3.必须有参数(和类不同之处)
4.如果申明了构造函数,那么必须在其中对所有变量数据初始化。(结构体中的所有)
5.构造函数,一般是用于在外部方便初始化的,帮助我们快速初始化结构体对象的。
6.构造函数也是可以重载的。
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
| namespace Lesson1 { struct Student { public int age; public bool sex; public int number public string name; public int akt; public void Speak(){ Console.WriteLine("我的名字是{0},我今年{1}岁,",name,age) public Student(int age,bool sex,int number,string name,int id){ this.age=age; this.sex=sex; this.number=number; this.name=name; akt=10; } public void Speak(){ Console.WriteLine("。。。。。"); } } } internal class Program { static void Main(string[] args) { Student s2=new Student(18,true,2,"小红"); s2.Speak(); } } }
|
Ps:之后在学习面向对象和类时,还会对构造函数进行深入讲解。
注意:1.在结构体申明的变量,不能初始化,只能在外部或者构造函数中进行赋值(初始化)。
2.在结构体中申明的函数,不用加static
3.感觉自己还不是很清楚三.函数方法和二.构造函数的区别,上知乎看了看,一言以蔽之,构造函数用于初始化对象,而方法则用于执行特定的功能,因此,当你要给一个对象赋值时,要构造函数,而当你要让它做什么事情时,就要用到函数方法了。
4.关于在主函数中的调用,(默认使用上面的Student结构体)
1 2 3 4 5 6
| Student.s1=new Student();
s1.Student(12,true,2,"xiaohuang",3);
|
5.结构体是值类型,想要在函数内部改变值类型信息,外部受影响,一定记住用ref或者out。
(例如:将一个结构体的信息传到另一个结构体之中,对结构体内部的信息进行修改)
1 2 3 4 5 6 7 8 9 10 11 12
| struct OutMan{ public string name; public void Atk(ref Boss monster){ } } struct Boss{ public string name; public void Atk(ref OutMan Man ); }
|