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 定义结构体

public struct Point

{

    public int X { get; set; }

    public int Y { get; set; }
    
    // 构造函数

    public Point(int x, int y)

{

    X = x;

    Y = y;

}

// 方法

public void Display()

{

    Console.WriteLine($"Point: ({X}, {Y})");

}

3.2.2 使用结构体

public class Program
{
    public static void Main()
    {
        // 使用构造函数创建结构体实例
        Point p1 = new Point(10, 20);
        p1.Display(); // 输出: Point: (10, 20)

        // 默认构造函数
        Point p2;
        p2.X = 30;
        p2.Y = 40;
        p2.Display(); // 输出: Point: (30, 40)

        // 复制结构体
        Point p3 = p1;
        p3.X = 50;
        p3.Display(); // 输出: Point: (50, 20)
        p1.Display(); // 输出: Point: (10, 20) - p1 未受影响
    }
}

3.3 结构体和类的对比

特性

结构体(struct)

类(class)

 存储位置

栈(Stack)

堆(Heap

默认实例化方式

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

必须显式调用构造函数

继承

不支持继承

支持继承

值/引用

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

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

适用场景

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

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

3.4 使用场景

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

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

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

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

3.5.1 定义一个结构体

public struct Rectangle
{
    public int Width { get; set; }
    public int Height { get; set; }

    public Rectangle(int width, int height)
    {
        Width = width;
        Height = height;
    }

    public int GetArea()
    {
        return Width * Height;
    }

    public void Display()
    {
        Console.WriteLine($"Rectangle: Width = {Width}, Height = {Height}, Area = {GetArea()}");
    }
}

3.5.2 使用结构体

public class Program
{
    public static void Main()
    {
        // 创建结构体实例
        Rectangle rect1 = new Rectangle(10, 20);
        rect1.Display(); // 输出: Rectangle: Width = 10, Height = 20, Area = 200

        // 默认构造函数
        Rectangle rect2;
        rect2.Width = 15;
        rect2.Height = 25;
        rect2.Display(); // 输出: Rectangle: Width = 15, Height = 25, Area = 375

        // 复制结构体
        Rectangle rect3 = rect1;
        rect3.Width = 30;
        rect3.Display(); // 输出: Rectangle: Width = 30, Height = 20, Area = 600
        rect1.Display(); // 输出: Rectangle: Width = 10, Height = 20, Area = 200 - rect1 未受影响
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜回.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值