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#