结构体 struct 和类 class 的区别
class 和 struct 是 C# 里两种基本类型定义方式。class 是引用类型,分配在堆上,传递时复制引用;struct 是值类型,分配在栈上(或内联在父对象中),传递时复制整个结构。
什么时候用 struct?小而不可变的数据:坐标 Point、金额 Money、颜色 RGB。什么时候用 class?有行为的对象、可能需要继承的、数据量大的。自己的经验:如果结构体会被频繁装箱到集合里,还是用 class 好。
注意事项:1) struct 不支持继承(但可以实现接口);2) struct 不能有无参构造函数(C# 10 之前);3) struct 赋值会复制全部字段,大 struct 有性能开销。
代码示例
// class:引用类型
public class PersonClass
{
public string Name { get; set; } = "";
}
// struct:值类型
public struct Point
{
public int X { get; set; }
public int Y { get; set; }
public override string ToString() => $"({X}, {Y})";
}
// class 赋值:两个变量指向同一对象
var c1 = new PersonClass { Name = "Tom" };
var c2 = c1;
c2.Name = "Jerry";
Console.WriteLine(c1.Name); // Jerry
// struct 赋值:复制一份
var p1 = new Point { X = 1, Y = 2 };
var p2 = p1;
p2.X = 99;
Console.WriteLine(p1); // (1, 2) 不受影响
Console.WriteLine(p2); // (99, 2)
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。