结构体(struct)
Contents
结构体
- 结构体是一种自定义变量类型 类似枚举类型 需要自己定义
- 他是数据和函数的集合
- 在结构体中可以声明各种变量和方法
- 作用:用来表现存在关系的数据集合 比如用结构体表现学生 动物 人类等等
基本语法
- 结构体一般卸载namespace语句块中
- 结构体关键字 struct
- 结构体可以有构造函数(可选)
- 结构体的构造函数 必须有参数
- 如果声明了构造函数 那么必须在其对所有变量数据初始化
- 可以有重载 但必须对所有变量初始化
- 一般是用于初始化
- 结构体命名规范 帕斯卡命名法(首字母大写)
- 不可以在结构体中 包含一个和自己相同类型的结构体
struct StructName{
public string name;
public int age;
public bool sex;
public void Speak(){
Console.WriteLine("我的名字是"+name);
}
}
//结构体的使用
StructName st1;
st1.name = "罗杰";
st1.Speak();结构体和类的区别
- 结构体和类最大的区别是在存储空间上,结构体是值类型的(存在栈上) 类是引用类型(存在堆里)
- 结构体不具备继承和多态的特性 所以它也不能使用protected保护修饰符
- 语法上的区别
- 结构体不能使用protected访问修饰符 类可以
- 结构体的成员变量 不能指定初始值 而类可以
- 结构体不可以声明无参构造函数 且在申明有参构造函数后 必须在构造函数内初始化所有成员变量
- 结构体在声明有参构造后 无参构造不会被顶掉
- 结构体内不能有析构函数 类可以
- 结构体不可以被继承 类可以
- 结构体不可以被static修饰(不存在静态结构体)类可以
- 结构体不能在内部声明和自己一样的结构体变量 类可以
结构体和类的选择
- 想要用继承和多态时 选择类
- 对象是数据集合时 可以考虑结构体 比如位置 坐标等等
- 从值类型和引用类型赋值时的区别考虑,比如经常被赋值传递的对象 并且改变赋值对象 原对象不想跟着变化时 可以考虑结构体