深入探讨C#中的结构struct
在C#中,结构(struct)是一种值类型(value type),不同于引用类型(reference type)。结构可以用来表示较简单的数据结构,比如二维坐标(x,y),RGB颜色等等。
结构的定义
结构可以通过struct
关键字来定义。例如定义一个二维的点的结构,代码如下:
public struct Point2D {
public int x;
public int y;
public Point2D(int x, int y) {
this.x = x;
this.y = y;
}
}
public
表示该结构对其他代码可见.struct
表示该类型是一个值类型.x
和y
是该结构体的字段.Point2D(int x, int y)
是用于初始化该结构的构造函数.
结构的实例化
结构和类一样,都要先声明并实例化,但是结构的实例化不需要使用new
关键字,例如:
Point2D point = new Point2D(100, 200);
结构与类的区别
- 结构是值类型,存储在栈中;类是引用类型,存储在堆中.
- 结构不能继承其他类型;类可以继承其他类,也可以继承接口.
- 结构不支持析构函数;类可以有析构函数.
- 结构可以在不实例化的情况下直接访问其字段;类必须实例化后,才能访问其字段.
结构的示例
示例1 - 结构自带默认无参构造器
public struct RGBColor {
public int Red;
public int Green;
public int Blue;
// 声明无参构造函数
public RGBColor() {
// 默认构造函数,将三个字段的值都设置为0
this.Red = 0;
this.Green = 0;
this.Blue = 0;
}
}
在没有显式定义构造函数的情况下,结构也会自带一个无参构造函数。
示例2 - 结构作为方法参数时的传递方式
public struct Person {
public int age;
public string name;
public Person(int age, string name) {
this.age = age;
this.name = name;
}
}
class Program {
static void Main(string[] args) {
Person p = new Person(25, "Jack");
MakeOlder(p);
Console.WriteLine(p.age); // 输出: 25
}
static void MakeOlder(Person p) {
p.age += 10;
}
}
当一个结构作为方法参数传递时,该参数将会被复制一份,即传递的是结构的副本。在上述代码中,MakeOlder
方法中修改的只是该副本的值,原结构的值并未被改变。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入探讨C#中的结构struct - Python技术站