当前位置:   article > 正文

C# --- 深入学习结构体

C# --- 深入学习结构体

       结构体(struct)是一种用户定义的值类型。结构体通常用于封装一组相关的变量(比如数值和字符串),这些变量组成一个小型的数据结构。通俗易懂的解释:结构体(struct)是一种简单的数据类型,用于存储一组相关的数据。与类(class)不同,结构体是值类型,直接存储数据,通常用于表示轻量级对象,例如点的坐标或矩形的尺寸。

3.1 结构体的特点

3.1.1 值类型:结构体是值类型,它们存储在栈上而不是堆上。当你将一个结构体赋值给另一个结构体时,是对其值的拷贝。

3.1.2 轻量级:结构体适用于包含少量数据的小型数据结构。

3.1.3 不可继承:结构体不支持继承。你不能从一个结构体派生出另一个结构体。

3.1.4 默认构造函数:结构体自动提供一个无参数的默认构造函数,用于初始化其字段。

3.1.5 接口实现:结构体可以实现接口。

3.2 结构体的定义和使用

3.2.1 定义结构体

  1. public struct Point
  2. {
  3. public int X { get; set; }
  4. public int Y { get; set; }
  5. // 构造函数
  6. public Point(int x, int y)
  7. {
  8. X = x;
  9. Y = y;
  10. }
  11. // 方法
  12. public void Display()
  13. {
  14. Console.WriteLine($"Point: ({X}, {Y})");
  15. }

3.2.2 使用结构体

  1. public class Program
  2. {
  3. public static void Main()
  4. {
  5. // 使用构造函数创建结构体实例
  6. Point p1 = new Point(10, 20);
  7. p1.Display(); // 输出: Point: (10, 20)
  8. // 默认构造函数
  9. Point p2;
  10. p2.X = 30;
  11. p2.Y = 40;
  12. p2.Display(); // 输出: Point: (30, 40)
  13. // 复制结构体
  14. Point p3 = p1;
  15. p3.X = 50;
  16. p3.Display(); // 输出: Point: (50, 20)
  17. p1.Display(); // 输出: Point: (10, 20) - p1 未受影响
  18. }
  19. }

3.3 结构体和类的对比

特性

结构体(struct)

类(class)

 存储位置

栈(Stack)

堆(Heap

默认实例化方式

无参数构造函数自动初始化

必须显式调用构造函数

继承

不支持继承

支持继承

值/引用

值类型,赋值时复制其内容

引用类型,赋值时复制引用

适用场景

适合小型、简单的数据结构

适合复杂或大型的数据结构

3.4 使用场景

需要表示一个轻量级对象,且对象不会被修改(即不可变)。

对象的大小小于16字节,并且频繁创建和销毁。

对象的生命周期很短或被封装在另一个对象中使用。

3.5 定义和使用一个简单的结构体

3.5.1 定义一个结构体

  1. public struct Rectangle
  2. {
  3. public int Width { get; set; }
  4. public int Height { get; set; }
  5. public Rectangle(int width, int height)
  6. {
  7. Width = width;
  8. Height = height;
  9. }
  10. public int GetArea()
  11. {
  12. return Width * Height;
  13. }
  14. public void Display()
  15. {
  16. Console.WriteLine($"Rectangle: Width = {Width}, Height = {Height}, Area = {GetArea()}");
  17. }
  18. }

3.5.2 使用结构体

  1. public class Program
  2. {
  3. public static void Main()
  4. {
  5. // 创建结构体实例
  6. Rectangle rect1 = new Rectangle(10, 20);
  7. rect1.Display(); // 输出: Rectangle: Width = 10, Height = 20, Area = 200
  8. // 默认构造函数
  9. Rectangle rect2;
  10. rect2.Width = 15;
  11. rect2.Height = 25;
  12. rect2.Display(); // 输出: Rectangle: Width = 15, Height = 25, Area = 375
  13. // 复制结构体
  14. Rectangle rect3 = rect1;
  15. rect3.Width = 30;
  16. rect3.Display(); // 输出: Rectangle: Width = 30, Height = 20, Area = 600
  17. rect1.Display(); // 输出: Rectangle: Width = 10, Height = 20, Area = 200 - rect1 未受影响
  18. }
  19. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/1020833
推荐阅读
相关标签
  

闽ICP备14008679号