C#基础知识:结构体(S)详解与应用

需积分: 32 4 下载量 71 浏览量 更新于2024-08-19 收藏 1.17MB PPT 举报
"C#基础知识全篇巩固:结构体(S)" 在C#编程语言中,结构体(Struct)是一种用户自定义的数据类型,用于封装多个值类型的数据。它们类似于类(Class),但有以下显著的区别: 1. **内存管理**: - 类是引用类型,而结构体是值类型。这意味着当类实例化时,会在堆上分配内存,而结构体在栈上分配内存。这通常导致结构体的创建和销毁速度更快,占用的内存更少。 - 当结构体作为参数传递或赋值时,会复制整个结构体的内容,而类则是复制对对象的引用。 2. **大小限制**: - 结构体的大小通常比类小,因为它们在栈上存储,适合小数据量的封装。 - 如果结构体包含大量数据,使用类可能是更合适的选择,以避免频繁的内存复制。 3. **默认构造函数**: - 结构体默认具有无参构造函数,允许初始化结构体的实例,就像在示例中那样定义`Person`结构体。 - 但结构体不能有显式的默认构造函数,只能有实例构造函数。 4. **方法和属性**: - 尽管结构体主要用于封装数据,但也可以包含方法,如`SayHi`函数。这些方法可以是实例方法,也可以是静态方法。 - 与类不同,结构体没有隐式实现的`Equals`、`GetHashCode`和`ToString`方法,需要手动实现这些方法以提供正确的比较和表示。 5. **继承与接口**: - 结构体不支持继承,但可以实现接口,这使得它们能够遵循特定的行为规范。 6. **比较与赋值**: - 结构体的比较默认基于值,而类的比较默认基于引用。这意味着两个结构体实例即使内容相同,如果不指向同一块内存,也会被视为不等。 - 结构体的赋值会导致副本创建,而类的赋值仅复制引用。 7. **C/S与B/S架构**: - 题目中提到的C/S(客户端/服务器)和B/S(浏览器/服务器)是两种不同的软件架构。 - C/S架构通常用于内部企业应用,具有更好的性能和安全性,但部署和维护成本较高。 - B/S架构则更适合互联网应用,具有较好的扩展性和较低的客户端要求,但安全性和性能可能较弱。 8. **变量声明**: - 在C#中,可以一次性声明多个不同类型的变量,例如: ```csharp int age; string name; double salary; ``` - 结构体中的成员也可以这样声明,例如`Person`结构体。 9. **类型选择**: - `Name`通常使用字符串(`string`)类型,因为它可以容纳任意长度的文本。 - `Age`使用整型(`int`)来表示年龄,因为年龄通常是非负整数。 - `Salary`通常使用双精度浮点数(`double`)或十进制(`decimal`)来表示货币,因为它们可以精确表示小数值。 - `Gender`使用字符(`char`)类型,因为性别只有两种状态,可以用单个字符表示。 10. **输出格式**: - 使用`Console.WriteLine`时,可以使用占位符(`{}`)配合`params`关键字方便地输出多个变量,例如: ```csharp Console.WriteLine("Name: {0}, Age: {1}", name, age); ``` - 或者使用字符串连接操作符(`+`): ```csharp Console.WriteLine("Name: " + name + ", Age: " + age); ``` 11. **编码与字符处理**: - 在C#中,字符串(`string`)是Unicode编码的,可以处理各种语言字符,如中文字符的输出。 12. **异常处理**: - 示例中提到的`Achievement`(成绩)的例子,如果需要确保用户输入是数字,可以使用`int.TryParse`或`double.TryParse`来安全地转换输入,避免引发异常。 理解结构体及其与其他数据类型的区别对于编写高效的C#代码至关重要。根据具体需求选择合适的类型和结构,可以优化程序的性能和内存使用。