C#入门之结构类型Struct
简介
Struct是C#中的一种结构类型,也称为值类型(Value Type),与类(Class)类型相对。Struct可以存储少量相关联的数据,常用于定义简单的数据类型,如好友列表、地址等。
与Class不同的是,Struct在创建时是值类型在栈中创建的,而Class是引用类型在堆中创建的。因此,Struct使用起来较为高效,但也具备一些限制。
定义
在C#中,定义Struct类型的语法格式如下:
struct StructName
{
// 结构体的成员变量和方法定义
}
其中,StructName为结构体的名称,可以按照类命名规范任意定义。
下面是一个简单的示例:
struct Point
{
public int x, y;
}
Point为一个简单的点结构体,包含x、y坐标两个整数类型的成员变量。
使用
在C#中,可以像使用Class一样使用Struct,例如:
Point p1 = new Point {x = 1, y = 2};
Point p2 = p1;
p2.x = 3;
Console.WriteLine($"p1.x={p1.x}, p1.y={p1.y}"); // 输出“p1.x=1, p1.y=2”
Console.WriteLine($"p2.x={p2.x}, p2.y={p2.y}"); // 输出“p2.x=3, p2.y=2”
在上述代码中,首先创建了一个Point类型的变量p1,并将x值赋为1,y值赋为2。然后,通过p1创建了一个新的变量p2,然后将p2的x值改为3。最后,输出p1和p2的x、y值。
可以看到,由于Struct是值类型,当创建p2并将其赋值为p1时,实际上是将p1结构体在栈中的全部内容复制给了p2,而不是简单地传递引用。因此,在修改p2的值后,p1并不受影响。
注意事项
-
由于Struct实际上是值类型,因此在进行传递时,会将结构体的全部内容复制一遍,从而占用大量内存。因此,不适合用于大型数据结构的处理。对于大型数据结构,应该使用Class类型或其他更适合的类型。
-
Struct必须是简单类型,不支持继承等复杂操作。
-
如果某个方法需要修改Struct类型的内容,必须将方法声明为
public
,而不能使用默认的private
,否则会提示编译错误。
示例
创建颜色结构体
struct Color
{
public int r, g, b;
public Color(int r, int g, int b)
{
this.r = r;
this.g = g;
this.b = b;
}
public override string ToString()
{
return $"RGB({r}, {g}, {b})";
}
}
上述代码中,定义了一个简单的Color结构体,包含r、g、b三个整数类型的成员变量。构造函数中初始化了结构体的成员变量,ToString方法用于输出RGB颜色值。
输出颜色列表
Color[] colors = new Color[]
{
new Color(255, 0, 0),
new Color(0, 255, 0),
new Color(0, 0, 255),
};
foreach (var color in colors)
{
Console.WriteLine(color.ToString());
}
上述代码中,创建了一个Color数组,包含3种颜色。然后,使用foreach遍历数组并依次输出各个颜色的RGB值。
总结
Struct是C#中的一种结构类型,用于定义简单的值类型。由于其在栈中创建,因此使用较为高效。但也有一些限制,例如不能用于大型数据结构。在进行传递时,可能会复制大量内存。在使用Struct时,需要注意这些限制。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#入门之结构类型Struct - Python技术站