怎么建设自己导购网站,asp.net网站开发流程,wordpress 前端注册,美丽深圳公众号二维码原图文章目录 定义结构体实例化结构体结构体的值类型特性结构体和类的区别限制 C# 中的结构体#xff08;Struct#xff09;是一种值类型数据结构#xff0c;用于封装不同或相同类型的数据成一个单一的实体。结构体非常适合用来表示轻量级的对象#xff0c;比如坐标点、颜色值或… 文章目录 定义结构体实例化结构体结构体的值类型特性结构体和类的区别限制 C# 中的结构体Struct是一种值类型数据结构用于封装不同或相同类型的数据成一个单一的实体。结构体非常适合用来表示轻量级的对象比如坐标点、颜色值或者复杂的数值类型因为它们不需要额外的堆分配与类相比这可以提高性能。
下面是使用结构体的一些基本概念
定义结构体
结构体通过 struct 关键字来定义。一个结构体可以包含字段、方法、属性、索引器、运算符、事件和构造函数。 在VS2022中定义结构体和定义类一样也是右键添加类文件产生后把class改为struct即可例如下面定义了一个Point结构体
namespace struct01
{public struct Point{public int X;public int Y;public Point(int x, int y){X x;Y y;}public override string ToString(){return $({X}, {Y});}}
}实例化结构体
结构体可以通过默认构造函数无参数的构造函数或者自定义的构造函数来实例化
// 默认构造函数
Point p1 new Point();// 自定义构造函数
Point p2 new Point(10, 20);结构体的值类型特性
由于结构体是值类型当一个结构体实例分配给另一个变量时其值会被复制。这意味着两个变量将引用两个独立的数据副本。 Point p3 new Point(30, 31);Point p4 p3; // p4 是 p3 的副本p3.X 303; // 结构体是值类型只修改了 p3 的 X 值p4 的 X 值不变Console.WriteLine($p4.X: {p4.X});在上面代码中因为结构体是值类型修改了 p3 的 X 值p4 的 X 值不变。 C#中类是引用类型例如下面的类CPoint
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace struct01
{internal class CPoint{public int X;public int Y;public CPoint(int x, int y){X x;Y y;}public override string ToString(){return $({X}, {Y});}}
}声明类对象
CPoint cPoint new CPoint(100, 200);
CPoint cPoint1 cPoint;cPoint1.X 101; // 类是引用类型cPoint1 是 cPoint 的引用修改 cPoint1 的 X 值cPoint 的 X 值也会改变Console.WriteLine($cPoint.X: {cPoint.X});类是引用类型cPoint1 是 cPoint 的引用修改 cPoint1 的 X 值cPoint 的 X 值也会改变。
Main函数全部代码如下
namespace struct01
{internal class Program{static void Main(string[] args){Console.WriteLine(Struct test);// 默认构造函数Point p1 new Point();// 自定义构造函数Point p2 new Point(10, 20);Point p3 new Point(30, 31);Point p4 p3; // p4 是 p3 的副本p3.X 303; // 结构体是值类型只修改了 p3 的 X 值p4 的 X 值不变Console.WriteLine($p4.X: {p4.X});CPoint cPoint new CPoint(100, 200);CPoint cPoint1 cPoint;cPoint1.X 101; // 类是引用类型cPoint1 是 cPoint 的引用修改 cPoint1 的 X 值cPoint 的 X 值也会改变Console.WriteLine($cPoint.X: {cPoint.X});}}
}运行结果如下 Struct test p4.X: 30 cPoint.X: 101
结构体和类的区别
结构体是值类型而类是引用类型。 结构体不支持继承而类支持。 结构体的实例可以在不使用 new 关键字的情况下创建这会导致其所有字段被默认初始化而类的实例必须使用 new。 结构体通常用于较小的数据结构类适用于较大的复杂对象。 结构体的使用场景
当你想要封装一小组相关的变量时。 当你知道数据量不大且不需要扩展的时候。 当性能是一个重要因素且你希望减少GC垃圾回收的压力时。
限制
结构体不能有默认的无参构造函数。 结构体不能继承其他的结构体或类并且不能作为基础结构体或类。 结构体成员不能指定为 abstract, virtual, 或 protected. 使用结构体的一个关键点就是要理解值类型与引用类型的区别。值类型存储在栈上而引用类型存储在堆上这影响了性能和资源的使用。适当地使用结构体可以提高应用程序的性能。