C# 结构体

2025 年 8 月 7 日 | 阅读 7 分钟

在 C# 编程语言中,结构体(struct)类似于类,用于将数据存储在单个单元下。结构体是值类型,这意味着它们存储在堆栈上,并按值传递而不是按引用传递。它包含许多不同的 数据类型,并且是一种用户定义的数据类型。它可以包含嵌套类型、常量、字段、方法、属性、索引器、运算符事件以及参数化构造函数或 静态构造函数。结构体由 `struct` 关键字定义。

C# Structs

在 C# 中定义结构体

在 C# 中,可以使用 `struct` 关键字来定义结构体。

例如

声明 C# 中的结构体变量

C# 编程中,在使用结构体之前必须先声明一个结构体变量。这是通过指定结构体名称后跟变量名称来完成的。

例如

访问 C# 中的结构体成员

使用点(.)运算符来访问结构体成员。示例如下。

例如

在这里,我们使用 **mst** 变量和点(.)运算符来访问 master 的成员。

C# 中的结构体示例

让我们举例说明如何在 C# 中定义结构体。

示例

编译并运行

输出

The name is Michael
The age is 25

说明

在此示例中,我们创建了一个名为 Person 的结构体,其中包含两个变量 name(字符串)和 age(整数)。之后,它定义了参数化构造函数来初始化这些字段,以及 DisplayInfo() 方法来打印详细信息。在 Main 方法中,我们创建对象(p1)并调用 DisplayInfo() 方法来显示详细信息。

C# 中的结构体构造函数

在 C# 中,可以通过使用 `public` 关键字后跟结构体名称来定义构造函数来为结构体创建构造函数。

语法

它具有以下语法。

C# 结构体构造函数示例

让我们举例说明结构体的使用构造函数。

示例

编译并运行

输出

The name is: Jhonson, Age: 25

说明

在此示例中,我们创建了一个名为 Person 的结构体,其中包含两个变量 name(字符串)和 age(整数)。之后,它定义了参数化构造函数来初始化这些字段,以及 DisplayInfo() 方法来打印详细信息。在 Main 方法中,我们创建对象(p1)并调用 DisplayInfo() 方法来显示详细信息。

不可变结构体 (struct)

在 C# 编程语言中,如果一个结构体的状态在创建后不能被改变,那么它就被称为不可变结构体。这意味着在构造函数调用后,结构体的任何字段或属性都不能被修改。

不可变结构体示例

让我们举例说明 C# 中的不可变结构体。

示例

编译并运行

输出

Name: Albert, Contact: 878283XXXX, ID: EMPO01

说明

在此示例中,我们定义了一个名为 Details 的不可变结构体,其中包含三个只读字段:name、contact 和 id。之后,我们创建了一个参数化构造函数并设置值。ShowDetails() 方法显示这些值。在 Main 方法中,创建对象并调用 ShowDetail() 方法来打印详细信息。

C# 中的结构体数组

在 C# 中,结构体数组允许我们将多个结构体实例存储在单个数组中。可以使用带有特定索引的 数组来访问结构体成员。

语法

它具有以下语法:

在此语法中,定义了一个索引,该索引是数组中插入或删除值的特定位置,data 是结构体中的值。

C# 中的结构体数组示例

让我们举例说明 C# 中的结构体数组。

示例

编译并运行

输出

Employee details: 
Id: 1
Name: John
Age: 50

Employee details: 
Id: 2
Name: Thomson
Age: 31

Employee details: 
Id: 3
Name: David
Age: 27

说明

在此示例中,我们定义了一个名为 Emp 的结构体,其中包含三个变量:Roll_No、Name 和 Age。我们还包含两个方法:Set_Emp() 用于赋值,Display_Emp() 用于显示员工详细信息。在 Main 方法中,创建了一个包含三个 Emp 结构体的数组,并使用 Set_Emp() 方法对其进行初始化。之后,程序使用 Display_Emp() 方法显示每个员工的详细信息。

C# 中的属性

在 C# 编程语言中,结构体(structure)中的 属性用于封装和管理对结构体字段的访问。与类一样,结构体也可以具有带有 get 和 set 访问器的属性,并且它们也可以是只读的。

C# 结构体属性示例

让我们举例说明 C# 中的结构体属性。

示例

编译并运行

输出

Student Id: 1

说明

在此示例中,我们使用了一个名为 Stu_dent 的结构体,它由私有字段 id 和公共属性 Id 定义,该属性通过 get 和 set 访问器提供对其的受控访问。在 main() 方法中,创建了结构体的实例,为 Id 属性赋值,然后显示结果。

结构体与类之间的区别

结构体和类在 C# 中有许多区别。一些主要区别如下:

结构Class
结构体是值类型。类是引用类型。
结构体不支持继承。类支持继承。
结构体由 `struct` 关键字定义。类由 `class` 关键字定义。  
结构体成员默认是公共的。类成员默认是私有的。
结构体的语法是:
struct StructName {
datatype m1;
datatype m2;
};
类的语法是:
class ClassName {
// 数据成员
// 数据方法
};

C# 结构体的特性

C# 结构体的几个特性如下。

  • 结构体可以拥有方法、属性、索引器、字段、运算符方法和事件。
  • 它还可以包含参数化构造函数、常量、枚举和嵌套类型。
  • 结构体是值类型,这意味着它存储在堆栈上并按值传递。
  • 结构体可以实现一个或多个接口。
  • 结构体成员不能是 protected、virtual 或 abstract。

结论

总之,C# 结构体(struct)是任何开发软件应用程序的开发人员都必须掌握的重要概念。它是开发的主要目标。结构体类似于类,用于将数据存储在单个单元下。它是一种值类型。它包含许多不同的数据类型。它包含多个方法、属性、索引器、字段、运算符方法和事件。

C# 结构体常见问题解答

1) C# 中的结构体是什么?

在 C# 编程语言中,结构体(struct)类似于类,用于将数据存储在单个单元下。结构体是值类型,这意味着它们存储在堆栈上,并按值传递而不是按引用传递。它包含许多不同的数据类型,并且是一种用户定义的数据类型。

2) 我们可以定义 C# 中的构造函数吗?

是的,我们可以在 C# 中定义参数化构造函数。

3) 结构体在 C# 中支持继承吗?

结构体不支持继承。它不能被其他类或结构体继承。

4) C# 中的结构体和类有什么区别?

结构体和类之间的主要区别在于,结构体是存储在堆栈上的值类型,而类是存储在堆上的引用类型。

5) 为什么我们选择使用结构体而不是类?

当我们需要一个轻量级对象来表示少量数据时,我们可以使用结构体。与类相比,它们更节省内存,因为它们是值类型,存储在堆栈上。


下一个主题C# 枚举