C# 结构

结构即结构体,是值类型数据结构。

特点:

结构即结构体,是值类型数据结构。
结构使用 struct 关键字声明。
结构和类相比,一般保存的数据量少,存储在栈上,读取速度比类快。
结构可带有方法、字段、索引、属性、运算符重载和事件。
结构可定义有参构造函数,但不能定义析构函数和无参构造函数。
结构和类不同,不支持继承。但结构可以实现接口。
结构成员不能指定为 abstract、virtual 或 protected。
当您使用 new 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。
值类型本质就是用结构实现的。结构就是自定义的值类型。

类型:值类型,引用类型

值类型在存取时性能高,原因:存储到栈(又称堆栈)

引用类型存储堆(托管堆)

值类型一般存储的数据量少,引用类型存储数据量大,且复杂。

结构也可以像类一样存储大量且复杂的数据。(场景相对少一些)

结构使用的场景:

1:一般存储少量且简单的数据结构,追求性能(如:int,long,bool等)

2:存储大量且复杂的数据结构,且性能高(场景少一些)

C#语言中,其实所有的类都可以转换结构,所有结构也可以转换类。

类和结构两个技术点,类比较灵活,结构受限制。

结构使用时和类一样,可以先new

public struct Book
{
    // 结构中不能有无参构造函数
    //public Book() { }

    // 结构中可以包含有参构造函数
    public Book(int id, string name, float price)
    {
        // 在构造函数对结构属性初始化
        this.Id = id;
        this.Name = name;
        this.Price = price;
    }

    // 结构中也可以有属性,方法,事件,索引器等这些类中的成员

    public int Id { get; set; }

    // 结构中【一般】不建议使用完整的属性,原因:字段在结构中不能初始化
    /*private string _name = "张三";  // 结构中字段不能初始化

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }*/

    public string Name { get; set; }
    public float Price { get; set; }

    public void Read(int page)
    {
        Console.WriteLine($"{this.Name}已经被读了{page}页");
    }

    // 结构中不能有析构函数(终结器)
    //~Book() { }
}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值