- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 结 构在实际生活中,我们经常把一组相关的信息放在一起,比如通讯录的记录。这样便于我们记忆和处理。同样,编程也采纳了这种处理模式。在编程中,把一系列相关的变量组织成为一个单一实体的过程称就为生成结构的过程。这个单一实体的类型就叫做结构类型,每一个变量称为结构的成员。本章将为大家详细讲解C#语言中的结构。9.1 结 构 概 述结构和类非常相似。类类型是一种引用类型,它的变量仅仅包含访问某个数据的一个引用(或地址)。但结构是一种值类型,并且不需要堆分配。如果声明一个很大的数组,为了引用每个对象,就需要分配更多的内存。这种情况下,使用结构可以节约资源。本节学习结构的声明和它的修饰符。1.结构声明结构和类一样,在使用之前需要声明。声明结构需要使用struct关键字,语法如下:struct-modifiers struct identifier struct-interfaces struct-body ;struct-modifiers表示结构修饰符(可选),identifier表示结构的名称,struct-interfaces表示结构的基接口等(可选),struct-body表示结构体,;(分号)是可选的。【示例9-1】下面声明名称为Str的结构。public struct Str //声明一个名为Str的结构{ … //结构体的代码已经省略}2.结构修饰符和类一样,结构也需要修饰符去限定它。不同的结构,也有不同的访问权限。C#中有多种修饰符来表达结构的不同性质。结构修饰符放在struct关键字的前面,它包括new、public、protected、internal和private共5个关键字。其中,public、protected、internal和private修饰符控制结构的可访问性。它们的意义具体说明如下所示。public修饰符:表示该结构是公开的,访问不受限制。protected修饰符:表示该结构只能是本身或其派生的结构访问。internal修饰符:表示该结构只能是在当前应用程序中访问。private修饰符:表示该结构只能是本身访问。?注意:new修饰符可以指定接口隐藏同名的继承成员。结构和类一样,它也包含多种成员,如常量、字段、方法等。具体说明如下所示:常量:用来表示常数值。字段:结构的变量。方法:是包含一系列语句的代码块,通过这些代码块能够实现预先定义的计算或操作。属性:用于访问对象或结构的特性的成员。事件:一种使对象或结构能够提供通知的成员。客户端可以通过提供事件处理程序(event handler)为相应的事件添加可执行代码。9.2 结 构 成 员索引器:是一种含有参数的属性,又称为含参属性。它提供索引的方式来访问对象,即与数组的访问方式相同。运算符:定义表达式运算符,通过它可以对该结构的实例进行运算。实例构造函数:不使用static修饰符,用于实现初始化该结构的实例所需的操作。静态构造函数:使用static修饰符,用于实现初始化该结构自身所需的操作。类型:该结构的局部类型。上述成员除了类型之外,可以分类两大类:数据成员和函数成员。其中,数据成员包括常量和字段;函数成员包括方法、属性、事件、索引器、运算符、实例构造函数和静态构造函数。?注意:由于结构的成员和类的成员非常相似,因此在此不做详细介绍,读者可以参考类成员(第8.2节)。9.3 结构和类的区别结构和类虽然比较相似,但是还存在以下8个方面的区别,如下表所示。区别项结构类类型值类型引用类型在内存中的分配分配在堆栈上分配在堆上默认值字段本身类型的默认值字段的默认值为null无参数的构造函数不能声明可以声明析构函数不能声明可以声明实例字段的初始化不能可以继承不存在继承,但可以实现接口存在单继承实例化时new运算符的使用可以不使用,对象具有默认初始值必须使用,且要给每个字段赋初值9.3.1 继承在前面第8.1.3小节我们简单学习了类继承,但是结构不支持继承。因此,在声明结构成员时,不能使用protected或protected internal修饰符。结构类型永远不会是抽象的,并且始终是隐式密封的。因此,结构不能作为其他结构或类的基结构,而且在声明结构时,不能使用abstract或sealed修饰符。【示例9-2】下面声明名称为Str的结构,它包含两个字段:name和age。其中,在声明age字段时使用了protected修饰符。public struct Str{ string name; protected int age; //错误,不能使用protected修饰符}分析:在age的声明处将产生一个编译错误,错误信息为“结构中已声明新的保护成员”。因此,结构成员是不能用protected修饰的。结构类型隐式地从System.ValueTyp
文档评论(0)