在 C# 中,结构(Struct)是一种用户定义的值类型,用于组织和存储相关数据。结构与类(Class)相似,但有一些关键区别。以下是关于 C# 结构的基本概念和使用教程:

1. 结构的声明:
// 声明一个结构
public struct Point
{
    public int X;
    public int Y;
}

2. 结构的实例化:
// 实例化结构
Point p1 = new Point();
p1.X = 10;
p1.Y = 20;

// 使用对象初始化器实例化结构
Point p2 = new Point { X = 5, Y = 15 };

3. 结构的使用:
// 访问结构的成员
Console.WriteLine($"Point 1: ({p1.X}, {p1.Y})");
Console.WriteLine($"Point 2: ({p2.X}, {p2.Y})");

// 结构之间的赋值是值拷贝
Point p3 = p1;
p3.X = 100;

Console.WriteLine($"Point 1: ({p1.X}, {p1.Y})"); // 不受 p3 的修改影响

4. 结构 vs 类:

  •  值类型 vs 引用类型: 结构是值类型,而类是引用类型。值类型的变量直接包含其数据,而引用类型的变量包含的是对数据的引用。

  
  •  内存分配: 结构的实例通常分配在栈上,而类的实例分配在堆上。


  •  默认构造函数: 结构没有默认的无参构造函数。如果在定义结构时没有提供构造函数,C# 会生成一个默认的无参构造函数。如果提供了任何构造函数,就不会生成默认构造函数。

// 结构没有默认构造函数
public struct Point
{
    public int X;
    public int Y;

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

5. 结构的使用场景:

结构适用于较小的数据类型,而且它们的实例应该是轻量级的。一般情况下,如果不需要继承、不需要在堆上分配对象,并且结构的实例较小,那么结构是一个不错的选择。

6. 注意事项:

  •  不要过度使用结构,特别是当结构较大时,因为它们会在栈上分配内存,可能会导致栈溢出。

  •  结构应该是不可变的,即结构的成员不应该在结构的实例之间改变。

// 不推荐的写法,修改了结构的成员
public struct MutablePoint
{
    public int X;
    public int Y;

    public void Reset()
    {
        X = 0;
        Y = 0;
    }
}

这是关于在 C# 中使用结构的一些基本概念。结构是一种用于组织数据的轻量级方式,但在选择结构还是类时,需要根据具体的使用场景和需求进行考虑。


转载请注明出处:http://www.zyzy.cn/article/detail/6348/C#