Contents

结构体(struct)

结构体

  • 结构体是一种自定义变量类型 类似枚举类型 需要自己定义
  • 他是数据和函数的集合
  • 在结构体中可以声明各种变量和方法
  • 作用:用来表现存在关系的数据集合 比如用结构体表现学生 动物 人类等等

基本语法

  • 结构体一般卸载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();

结构体和类的区别

  1. 结构体和类最大的区别是在存储空间上,结构体是值类型的(存在栈上) 类是引用类型(存在堆里)
  2. 结构体不具备继承和多态的特性 所以它也不能使用protected保护修饰符
  3. 语法上的区别
    1. 结构体不能使用protected访问修饰符 类可以
    2. 结构体的成员变量 不能指定初始值 而类可以
    3. 结构体不可以声明无参构造函数 且在申明有参构造函数后 必须在构造函数内初始化所有成员变量
    4. 结构体在声明有参构造后 无参构造不会被顶掉
    5. 结构体内不能有析构函数 类可以
    6. 结构体不可以被继承 类可以
    7. 结构体不可以被static修饰(不存在静态结构体)类可以
    8. 结构体不能在内部声明和自己一样的结构体变量 类可以

结构体和类的选择

  1. 想要用继承和多态时 选择类
  2. 对象是数据集合时 可以考虑结构体 比如位置 坐标等等
  3. 从值类型和引用类型赋值时的区别考虑,比如经常被赋值传递的对象 并且改变赋值对象 原对象不想跟着变化时 可以考虑结构体