结构即结构体,是值类型数据结构。
特点:
结构即结构体,是值类型数据结构。
结构使用 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() { }
}