C#

Wesley13
• 阅读 604

结构体概念
  在C#中,结构体是值类型,一般适用于表示类似Point、Rectangle、Color的对象
  值类型能够降低对堆的管理、使用。降低垃圾回收,表现出更好的性能。可是值类型也有不好的一面。会涉及到装箱拆箱等操作

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

声明一个学校的结构

1 struct School
2 {
3     public int name;
4     public string head_master;
5     public int class_number;
6     public int student_number;
7 };

结构体的使用

 1 using System;
 2 
 3 struct School
 4 {
 5     public int school_id;
 6     public string head_master;
 7     public int class_number;
 8     public int student_number;
 9 };
10 
11 public class testStructure
12 {
13     public static void Main(string[] args)
14     {
15         School TianYangHighSchool;  // 声明一个学校
16 
17         // 学校详细
18         TianYangHighSchool.school_id = 12345;
19         TianYangHighSchool.head_master = "Tynam.Yang";
20         TianYangHighSchool.class_number = 6;
21         TianYangHighSchool.student_number = 456;
22 
23         // 打印学校信息
24         Console.WriteLine("田阳高中学校的学校id是:{0}," +
25             "校长名字是:{1}," +
26             "一共有{2}个教室," +
27             "总共有{3}名学校",
28             TianYangHighSchool.school_id,
29             TianYangHighSchool.head_master,
30             TianYangHighSchool.class_number,
31             TianYangHighSchool.student_number);
32 
33         Console.ReadKey();
34     }
35 }

  运行结果

  C#

结构体特点
  结构体可以有方法,字段,索引器,属性,操作符方法和事件
  结构体可以有定义的构造函数,但不能是析构函数。但是不能为结构定义默认构造函数。默认构造函数是自动定义的,不能被更改
  与类不同,结构体不能继承其他结构体或类
  结构体不能用作其他结构或类的基础
  结构体可以实现一个或多个接口
  结构成员不能被指定为抽象,虚拟或受保护
  当使用New运算符创建一个struct对象时,它将调用相应的构造函数。 与类不同,可以在不使用New运算符的情况下实例化结构体
  如果不使用New运算符,则字段保持未分配,并且在所有字段初始化之前不能使用对象

结构体 VS 类
  结构体是值类型,存储在栈上,类是引用类型,存储在托管堆上,结构体在声明的时候就已经为其分配栈上的内存了,而类需要用 new为其分配堆上面的内存
  结构体是隐式密封的,不能用 sealed 和 abstract 修饰,结构体不能被继承,类可以被继承
  结构体中的实例字段只能声明,不能赋值,而类没有限制,结构体只声明没有用 new 进行初始化时,可以给他的实例字段赋值,而类不行
  结构体没有析构函数,结构体中的方法不能用 virtual 和 abstract 修饰,但是可以用 override 修饰,用来重写父类的方法
  结构体不能显示给出默认构造函数(无参数的构造),无论有没有自定义构造,默认构造都隐式存在,而类中有自定义构造函数时,默认构造会被隐藏,要想调用默认构造,必须显示给出默认构造
  结构体的自定义构造函数必须初始化所有的实例字段和没有初始化的非静态属性,类没有限制

结构与类的选择
  堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
  结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低 
  在表现抽象和多级别的对象层次时,类是最好的选择
  大多数情况下该类型只是一些数据时,结构时最佳的选择

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
DLL 函数中使用结构体指针作函数参数(C# 调用 C++ 的 DLL)
存在的问题:问题1:C与C同样定义的结构体在内存布局上有时并不一致;问题2:C中引入了垃圾自动回收机制,其垃圾回收器可能会重新定位指针所指向的结构体变量。解决方案:问题1方案:强制指定C、C结构体的内存布局,使其一致(两者都固定为:结构体的成员按其声明时出现的顺序依次布局,结构体成员的内存对齐为1字节对齐);为题
Wesley13 Wesley13
3年前
GO值类型与引用类型
值类型值类型包括基本数据类型,int,float,bool,string,以及数组和结构体(struct)。值类型变量声明后,不管是否已经赋值,编译器为其分配内存,此时该值存储于栈上。值类型的默认值:varaint//int类型默认值为0varbstring//string类型默认值为n
Stella981 Stella981
3年前
Rust 入门 (五)
定义并介绍结构体结构体和我们前面学习的元组类似,结构体中的每一项都可以是不同的数据类型。和元组不同的地方在于,我们需要给结构体的每一项命名。结构体较元组的优势是:我们声明和访问数据项的时候不必使用索引,可以直接使用名字。声明结构体我们直接看一个结构体的例子:structUser{user
Easter79 Easter79
3年前
Swift3.0 类和结构体的选择
结构体实例总是通过值传递,类实例总是通过引用传递先说说值类型和引用类型的区别值类型被赋予给一个变量、常量或者被传递给一个函数的时候,其值会被拷贝在Swift中,所有的结构体和枚举类型都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。引用类型在被赋予到一个变量、常
Easter79 Easter79
3年前
Systemverilog for design 笔记(四)
转载请标明出处数组、结构体和联合体1. 结构体(struct)1.1. 结构体声明结构体默认是变量,也可以声明为线网varstruct {//通过var进行结构体变量声明logic\31:0\a,b;
Wesley13 Wesley13
3年前
C语言利用动态数组实现顺序表(不限数据类型)
实现任意数据类型的顺序表的初始化,插入,删除(按值删除;按位置删除),销毁功能。、顺序表结构体  实现顺序表结构体的三个要素:(1)数组首地址;(2)数组的大小;(3)当前数组元素的个数。1//顺序表结构体2structDynamicArray{3voidaddr;//指向数组的首地址(
小万哥 小万哥
7个月前
Go 语言中结构体的使用和示例
结构体(简称struct)用于创建不同数据类型的成员集合,放入一个单一的变量中。虽然数组用于将相同数据类型的多个值存储在单一变量中,但结构体用于将不同数据类型的多个值存储在单一变量中。结构体对于将数据组合在一起以创建记录非常有用。声明结构体要在Go中声明一
小万哥 小万哥
9个月前
C 语言结构体和枚举完全指南:成员访问、字符串操作、枚举基础
访问结构体成员要访问结构体的成员,请使用点语法(.):c//创建名为myStructure的结构体structMyStructureintmyNum;charmyLetter;;intmain()//创建名为s1的myStructure的结构体变量stru