关于C#结构体 你需要知道的

2020-06-04 18:00:37王旭

结构体概念

  在C#中,结构体是值类型,一般适用于表示类似Point、Rectangle、Color的对象

  值类型能够降低对堆的管理、使用。降低垃圾回收,表现出更好的性能。可是值类型也有不好的一面。会涉及到装箱拆箱等操作

结构体声明

  结构体声明定义了一种新的数据类型,这个数据类型可以为程序包含一个以上的成员变量

  要定义一个结构,需要使用struct语句

声明一个学校的结构

struct School
{
  public int name;
  public string head_master;
  public int class_number;
  public int student_number;
};

结构体的使用

using System;

struct School
{
  public int school_id;
  public string head_master;
  public int class_number;
  public int student_number;
};

public class testStructure
{
  public static void Main(string[] args)
  {
    School TianYangHighSchool; // 声明一个学校

    // 学校详细
    TianYangHighSchool.school_id = 12345;
    TianYangHighSchool.head_master = "Tynam.Yang";
    TianYangHighSchool.class_number = 6;
    TianYangHighSchool.student_number = 456;

    // 打印学校信息
    Console.WriteLine("田阳高中学校的学校id是:{0}," +
      "校长名字是:{1}," +
      "一共有{2}个教室," +
      "总共有{3}名学校",
      TianYangHighSchool.school_id,
      TianYangHighSchool.head_master,
      TianYangHighSchool.class_number,
      TianYangHighSchool.student_number);

    Console.ReadKey();
  }
}

运行结果

结构体特点

  结构体可以有方法,字段,索引器,属性,操作符方法和事件

  结构体可以有定义的构造函数,但不能是析构函数。但是不能为结构定义默认构造函数。默认构造函数是自动定义的,不能被更改

  与类不同,结构体不能继承其他结构体或类

  结构体不能用作其他结构或类的基础

  结构体可以实现一个或多个接口

  结构成员不能被指定为抽象,虚拟或受保护

  当使用New运算符创建一个struct对象时,它将调用相应的构造函数。 与类不同,可以在不使用New运算符的情况下实例化结构体

  如果不使用New运算符,则字段保持未分配,并且在所有字段初始化之前不能使用对象

结构体 VS 类

  结构体是值类型,存储在栈上,类是引用类型,存储在托管堆上,结构体在声明的时候就已经为其分配栈上的内存了,而类需要用 new为其分配堆上面的内存

  结构体是隐式密封的,不能用 sealed 和 abstract 修饰,结构体不能被继承,类可以被继承

  结构体中的实例字段只能声明,不能赋值,而类没有限制,结构体只声明没有用 new 进行初始化时,可以给他的实例字段赋值,而类不行