结构体
我们⽬前学习的变量,都是某⼀个单⼀的信息,⽐如
对于⼀个学⽣信息的话,是包含了这些的,我们怎么对这些信息进⾏⼀个整合呢?
答案:结构体
结构体的作⽤就是把某⼀类的变量进⾏整合,组成⼀个新的数据类型,相当于⼀个新的信息。
⽐如学⽣信息(包含了 年龄,姓名、年级、学号)
创建10个学生的数组
c# StudentInfo[] students = new StudentInfo[10];
students[0].age = 30;
Console.WriteLine(students[0].age); //给1号学生年龄赋值
int[] stuAge = new int[10]; //创建10个学生年龄的数组
string[] stuName = new string[10]; //创建10个学生名字的数组
怎么定义和使⽤结构体?
c#struct <name>{
访问权限 type typename;
访问权限 type typename;
}
❓学⽣信息的结构体
c#struct StudentInfo{
public int age; // public 权限 公开的
public String name;
public int grade;
public String studyID;
}
StudentInfo xiaoming;
xiaoming.age = 12;
xiaoming.name = "⼩明";
xiaoming.grade = 2;
xiaoming.studyID = "101214";
❓定义⼀个表⽰三维坐标的结构体
c#struct Position{
public double x;
public double y;
public double z;
}
Position point1;
point1.x = point.y = 23.5;
point1.z = 1.5;
结构体中的函数
c# struct Position
{
public double x;
public double y;
public double z;
public void PrintPosition()
{
Console.WriteLine(x + "," + y + "," + z);
}
}
static void PrintPosition(Position p)
{
Console.WriteLine(p.x + "," + p.y + "," + p.z);
}
Position p1; //调用
p1.x = 23.3;
p1.y = 3.4;
p1.z = 1;
p1.PrintPosition();
Position p2; //调用
p2.x = 1;
p2.y = 2;
p2.z = 3;
p2.PrintPosition();
结构体中不但可以定义属性,也可以定义函数。
c#struct CustomerName{
public string firstName;
public string lastName;
}
CustomerName myName;
myName.firstName = "siki";
myName.lastName = "Liang";
Console.WriteLine("My name is "+myName.firstName+" "+myName.lastName);
// 在结构体中定义函数,实现得到名字
struct CustomerName{
public string firstName;
public string lastName;
public string GetName(){
return firstName+" "+lastName;
}
Console.WriteLine("My name is "+ GetName);
}
提示
当我们在结构体中定义⼀个函数的时候,这个函数就可以通过结构体声明的变量来调⽤, 这个函数可以带有参数,那么调⽤的时候必须传递参数, 这个函数,可以使⽤结构体中的属性。
❓结构函数训练:
定义⼀个Vector3的类(这个类可以⽤来表⽰坐标,可以表⽰向量),在⾥⾯定义⼀个Distance⽅法,⽤来取得⼀个向量的⻓度的
c# struct Vector3
{
public double x;
public double y;
public double z;
public double Distance()
{
double temp = x * x + y * y + z * z;
return Math.Sqrt(temp);
}
} // 主函数入口
static void Main(string[] args)
{
Vector3 v1;
v1.x = 4;
v1.y = 5;
v1.z = 7;
Console.WriteLine(v1.Distance());
}