C# 中的结构与类的区别详解

需积分: 45 33 下载量 51 浏览量 更新于2024-08-07 收藏 4.67MB PDF 举报
"C#语言规范第五版中文版,详细阐述了C#编程中的类与结构的区别,以及域名实现和标准的rfc1035相关内容。" 在C#编程语言中,类和结构是两种基本的类型定义,它们在很多方面都有所不同,尤其是在面向对象编程的概念中扮演着关键角色。类是引用类型,而结构是值类型,这是它们最根本的区别。 1. **结构是值类型** (第11.3.1节): 结构类型的实例存储在堆栈上或内置于其他结构或类中,当传递或赋值给另一个变量时,会复制整个结构的内容,而不是像类那样复制引用。这意味着对结构的修改不会影响原始实例。 2. **所有结构类型隐式继承自System.ValueType** (第11.3.2节): 这是与类从System.Object继承不同的地方。System.ValueType是一个特殊的系统类型,它为结构提供了许多必要的服务,如装箱和取消装箱。 3. **结构赋值行为** (第11.3.3节): 当一个结构被赋值给另一个变量时,实际上是创建了一个新副本,改变了副本的值不会影响原始结构。这与类的引用赋值行为相反,后者只是复制引用,指向同一个内存位置。 4. **结构的默认值** (第11.3.4节): 结构的默认值是由所有值类型字段的默认值和所有引用类型字段的null组成的。值类型字段默认为零或空,引用类型字段为null。 5. **结构与object之间的转换** (第11.3.5节): 由于结构是值类型,它们不能直接赋值给object类型的变量,需要通过装箱操作将结构转换为object。同样,从object类型回转到结构需要取消装箱操作。 6. **结构中的this指针** (第7.6.7节): 在结构中,this指针用于引用当前结构实例,但在结构中,this的行为与类有所不同,特别是在初始化和赋值上下文中。 7. **结构实例字段的初始化** (第11.3.7节): 与类不同,结构的实例字段声明中不允许包含变量初始值设定项。这意味着结构的字段必须在构造函数中初始化,而不是在声明时。 此外,文件中还涵盖了C#的其他编程元素,如表达式、语句、类和对象的概念,包括成员、可访问性、类型形参、基类、字段、方法、属性、索引器、事件、运算符、析构函数等。数组、接口、枚举、委托和特性的介绍也是C#语言规范的重要组成部分。词法结构部分则详细讨论了程序的构成,包括文法规则、语法分析,以及标识符、关键字和注释的使用。 这些知识点是理解C#编程的基础,对于开发者来说至关重要,因为它们直接影响到代码的编写、运行效率以及内存管理。熟悉这些概念有助于编写出高效、可维护的C#应用程序。