C# 结构体(Struct)
原文链接:https://www.cnblogs.com/ysmc/p/18802667
介绍
在C#中,结构体(Struct)是一种值类型数据结构,它可以封装不同类型的数据和方法。结构体通常用于表示轻量级的对象,比如坐标点、颜色值、矩形大小等。由于结构体是值类型,当它们被赋值或传递给方法时,会进行值的复制。
定义结构体
要定义一个结构体,你需要使用 struct 关键字,后面跟上结构体的名称和结构体的成员定义。下面是一个简单的结构体定义的例子:
1 public struct Point 2 { 3 public int X; 4 public int Y; 5 6 public Point(int x, int y) 7 { 8 X = x; 9 Y = y; 10 } 11 12 public void Move(int dx, int dy) 13 { 14 X += dx; 15 Y += dy; 16 } 17 }
结构体特点
- 值类型:结构体是值类型,所以它们在赋值或作为方法参数传递时,都会创建一个新的副本。
- 堆栈分配:结构体通常在栈上分配内存,这意味着它们的分配和回收通常比引用类型(如类)更快。
- 不支持继承:结构体不能继承其他的结构体或类,并且所有的结构体都隐式继承自
System.ValueType,它本身又继承自System.Object。 - 可以实现接口:尽管结构体不能继承其他结构体或类,但它们可以实现接口。
- 成员:结构体可以包含字段、属性、方法、构造函数、索引器、事件和嵌套类型。但是,结构体不能包含无参的构造函数或者析构函数。
使用结构体
你可以像使用简单类型一样使用结构体:
1 var p1 = new Point(0, 0); 2 var p2 = p1; // 创建 p1 的一个副本 3 p2.Move(2, 3); 4 Console.WriteLine(p1.X); // 输出 0 5 Console.WriteLine(p2.X); // 输出 2
在这个例子中,p2 是 p1 的一个副本,所以对 p2 的修改不会影响 p1。
结构体和类的对比
- 存储位置:结构体是值类型,存储在栈上,而类是引用类型,存储在堆上。
- 性能:结构体可以提供比类更好的性能,特别是当它们用于表示小型数据模型时。
- 复制行为:结构体的复制是值复制,类的复制是引用复制。
- 继承:类支持继承,结构体不支持。
何时使用结构体
尽管结构体在某些情况下性能更优,但并不意味着应该总是使用结构体。以下是使用结构体的一些指导原则:
- 表示的数据量较小。
- 期望的复制行为是值复制,而不是引用复制。
- 不需要利用继承。
- 实例不会频繁地被装箱和拆箱(转换为引用类型和回到值类型,这个过程可能会影响性能)。
本文来自博客园,作者:一事冇诚,转载请注明原文链接:https://www.cnblogs.com/ysmc/p/18802667

浙公网安备 33010602011771号