与引用类型Class不一样,结构体是一种值类型的数据结构,通过使用Struct关键字,我们可以在一个单一的变量中直接存储各种各样复杂的数据结构。
语法:
[访问修饰符] struct 结构体的名字
{
结构体成员
}
例子:
namespace StructTest
{
//结构体:
struct Game
{
public string name;
public string developer;
public DateTime releaseDate;
public void GetInfo()
{
Console.WriteLine($"游戏名称:{name},开发者:{developer},Date:{releaseDate}");
}
}
class Program
{
static void Main(string[] args)
{
Game game;
game.name = "bob";
game.developer = "gongdh";
game.releaseDate = DateTime.Today;
game.GetInfo();
Console.Read();
}
}
}
结构体的使用场景:
• 电脑的内存空间是有限的,分为堆内存和栈内存。堆内存空间远大于栈内存,但是栈内存执行效率却高于堆内存。
• 引用类型保存在堆内存中,而值类型则保存在栈内存。
• class对象是引用类型,它的数据结构都比较复杂,而且数据量一般也比较大,只有堆内存才能有足够的空间来保存,但是他的执行效率会比较低。而struct是值类型,可以有一定的数据结构,但是数据量小,可以保存在栈内存中,它具有很高的运行效率。
所以对于一个坐标点、矩形和颜色这样的轻量级的对象,可以通过使用结构体保存在栈内存中,这样运行效率会有明显的提升,所以使用结构的成本会比较低。
结构体的特点:
- 可带有方法、字段、索引、属性、运算符方法和事件。
- 结构不能定义无参的默认构造方法,因为默认构造函数是结构体预定一的,无法更改。
- 不过,除了无参默认构造方法,我们可以定义其他的有参数的构造函数。
- 结构可实现接口,但它不能继承,也不能被继承。
- 因为无法继承,所以我们也不能在结构中使用 abstract、virtual、与 protected等关键词。
- 我们可以使用new来创建结构对象,不过,不用new同样也可以创建结构实例。
- 如果不使用 New 操作符,只有在所有的字段都被初始化、被赋值以后,对象才能被使用。
在使用Class的时候,即便我们没有对他进行实例化,我们依旧可以访问它所有的成员方法和变量,可能运行过程中会出现系统崩溃的可能性,但至少在编译过程中不会报错。不过,这也就从另一个侧面反映出使用Struct要比使用Class更加安全可靠。
最后一点:作为值类型,Struct是不可以为空的,如果把game赋值为null,编译器会马上报错。
标签:Structs,game,内存,使用,数据结构,public,结构 From: https://www.cnblogs.com/ynysj/p/17006864.html