1、C# Programming in C# 结构体类型的定义 1 2 C#程序设计 6 3 在现实 应用问 题中, 经常碰 到一些 具有结 构性或 整体型 的一些信息 。 借助前 面所学 内容虽 然能够 把这些 信息分 别表示 ,但是 失去了实际 应用中 的整体 性和信 息关联 性。 对 于 这些比 较复杂 的数据 的表示 ,C# 提供 了结构 体类型 来保证数 据的描 述尽量 与实际 应用相 一致。 6.1 4 C# 的结 构体类 型(或 称为结 构)是 用户自 定义类 型的一 种,它为用 户将实 际应用 中数据 类型不 同,但 互相联 系的数 据看作一个整 体提供 了类型 支持。 6.1.1
2、 5 C# 的结 构体允 许将不 同类型 但又互 相联系 的数据 组合在 一起形成 一种新 的数据 类型, 定义形 式为: public struct 结构 体 类型 名 成 员 声明 6.1.1 6 成员声 明描述 了该类 型的数 据成员 (或称 为数据 元素) 以及其他类 型成员 的集合 。 成员的 数目可 以任意 多个, 由具体 应用确 定。 大括号 是成员 列表的 边界符 。 6.1.1 7 结构体 类型定 义时, 必须给 出各个 数据成 员的类 型声明 ,如下所示 : public 是 一 个访 问权限 修饰符 ,表示 该数据 成员允 许在结 构体类型 定义之 外的地 方访问 。 p
3、ublic 成员类型 成 员 名 称 列表; 6.1.1 8 如果 在定义 结构体 时,某 个数据 成员之 前没有public 访问 修饰符, 则结构 体类型 变量不 能访问 这个数 据成员 。 如果声 明的多 个成员 是同一 类型, 则形成 成员列 表,各 成员名称之 间用逗 号隔开 。 6.1.1 9 例如, 对于坐 标点信 息的表 示可以 建立下 面的结 构体类 型。 struct POINT public double x;/ 横 坐标 public double y;/ 纵 坐标 10 6.1.1 struct tagSTUDENT / 学 生信 息 类 型 public publi
4、c int no;/声明一个整型数据成员表示学号 public string name;/声明一 个 字 符 串 数 据 成 员 表 示 姓 名 public char sex;/声 明 一个 字 符 数 据 成 员 表 示 性 别 public int age;/ 声 明 一个 整 型 数 据 成 员 年 龄 public string qq;/ 声 明一个 字 符 串 数 据 成 员 表 示QQ 号 public double score;/ 声明一个浮点型数据成员表示成绩 ; 例如, 对于学 生信息 的表示 可以建 立下面 的结构 体类型 。 6.1.1 11 结构体 属于值 类型的 数
5、据类 型,可 以根据 其使用 范围选 择定义在某 个类的 内部或 者定义 在所有 类的外 部。 一般来 说,放 在类内 部定义 的结构 体类型 只在该 类中使 用,放在类 外部定 义的结 构体可 以在当 前命名 空间范 围内使 用。 C# 中, 结构体 定义不 能放在 方法或 函数内 部。 6.1.1 12 下面是 对结构 体类型 定义的 补充说 明。 struct 是 定 义 结构体类型 的一个 关键字 ,不代 表一种 数据类型。 只 有 使用struct 关键字定义 了具体 的结构 体类型 之后才 能定义相 应的变 量,因 此不能 使用struct 关键字来作 为变量 的数据类型。 6.1
6、.1 13 结 构体类 型定义 借助struct 关键字向编 译器声 明了一 种新的数据类 型,而 不是变 量。 对于该 数据类 型并没 有分配 相应的 存储空 间,因 此不能 直接对使用struct 关 键字 定义的 数据类 型进行 赋值等 应用于 变量的操作, 不能对 结构体 类型的 成员进 行初始 化。 6.1.1 14 结构 体类型 的成员 既可以 是简单 数据类 型的, 也可以 是结构体类型 的,即 结构体 的定义 可以嵌 套。例 如: struct DATE public int year; public int month; public int day; struct STUI
7、NFO public string sNo;/学号 public string sName;/姓名 public char sGender;/性别 public int sAge;/年龄 public double sHeight;/ 身高 public DATE sBirthday;/ 出 生 日期 ,DATE 类型 6.1.1 15 C# 中不 支持结 构体类 型的递 归定义 ,即不 允许结 构体类 型的成员 是本结 构体类 型的。 6.1.1 16 结构 体类型 使用一 对大括 号界定 一个属 于本身 类型的 作用域 ,因此其 成员名 称可以 与外部 标识符 相同。 结构 体类型 可以在 右大括 号 后使用 分号。 6.1.1 17 C# 中的结构体 除了 数据成 员之外 ,它也 有函数 成员。 结构体 与类最 大的区 别就是 类是引 用类型 ,而结 构是值 类型。 结构是 密封的 、不能 继承的 。 分配结 构比分 配类的 实例需 要更少 的消耗 ,所以 对于具 有值语义的 小型数 据结构 尤为有 用。 结束