C# 属性

2025 年 9 月 10 日 | 阅读 10 分钟

在 C# 编程语言中,属性是一种特殊类型的类成员,用于提供一种高效的技术来读取、写入和计算私有字段的值。C# 属性是字段的扩展,访问方式与字段相同。这些属性充当字段和方法之间的桥梁,提供对类数据的受控访问。

C# Properties

属性在 OOP 中普遍使用,因为它们支持封装抽象。属性具有用于设置、获取或计算其值的访问器。这些访问器不包含任何存储位置。

为什么要在 C# 中使用属性?

C# 属性有多种用途。其中一些如下:

  • C# 属性可以具有只读或只写访问权限。
  • 属性可以使用封装来保护类成员字段,封装用于隐藏实现细节。
  • 这些属性可用于通过访问器从另一个类访问类的私有数据成员。
  • 这些属性用于保护类成员,以便其他类不能使用这些成员。
  • 这些属性用于增强代码的可读性和可维护性。

语法

它具有以下语法:

在这个语法中,

  • Class_Name:它表示类的名称。
  • get:它仅用于访问(读取)属性值。
  • set: 它用于将新值分配(只写)给属性。
  • value:它用于保存用户分配的值。

属性的简单示例

让我们举一个例子来说明 C# 中的属性。

示例

编译并运行

输出

Michael

说明

在此示例中,我们使用了一个名为 Name 的属性,它提供对私有字段 name 的受控访问。之后,我们使用 set 访问器赋值“Michael”,并使用 get 访问器检索此值。

C# 中的访问器

C# 编程语言中,访问器是属性内部的代码块,它指定属性如何与类的私有字段交互。访问器通过规范化类字段如何从类外部读取或写入来强制执行封装。它确保内部数据保持安全,并可以以受控方式访问。

访问器类型

在 C# 中,主要有两种类型的访问器。它们如下:

C# Properties

在这里,我们将逐一讨论这些访问器。

1) Get 访问器

在 C# 编程语言中,get 访问器返回私有字段的值。当我们希望应用程序的其他部分可以读取值而无需更改它时,它很有用。

C# Get 访问器示例

让我们举一个例子来演示 C# 中的 get 访问器。

示例

编译并运行

输出

The Employee ID is: 101

说明

在此示例中,我们使用了 EmployeeId 属性,该属性允许访问私有字段 employeeId,但禁止从类外部进行修改。之后,构造函数将字段初始化为 101,get 访问器检索并打印它。

2) Set 访问器

在 C# 中,set 访问器为私有字段指定一个值。每当我们为属性赋值时,就会调用它。术语 value 在 set 块内用于表示传入数据。

C# Set 访问器示例

让我们举一个例子来演示 C# 中的 set 访问器。

示例

编译并运行

输出

Password is set (hidden for security).

说明

在此示例中,我们使用了 Password 属性,它允许我们指定一个私有字段,程序会在不泄露密码的情况下确认它。它通过限制外部访问敏感数据来维护安全性,同时允许输入。

C# 中的访问器可访问性

C# 还允许直接将访问修饰符(例如 private、protected)应用于访问器,但需遵循某些规则。

  • 只有同时具有 get 和 set 功能的属性才能为每个属性设置不同的访问级别。
  • 接口不允许使用访问器修饰符。
  • 被覆盖属性的访问器修饰符必须与基属性的访问器修饰符匹配。

属性类型

C# 有六种主要类型的属性,每种属性都服务于封装字段的不同访问要求。

C# Properties

在这里,我们将逐一讨论这些属性。

1) 只读属性

在 C# 编程中,只读属性提供对私有字段值的受控访问,同时防止从类外部进行更改。它只包含 get 访问器。

语法

它具有以下语法:

C# 只读属性示例

让我们举一个例子来说明 C# 中的只读属性。

示例

编译并运行

输出

No. of Employees: 3

说明

在 Employee 类中,Counter 属性是只读的,只包含一个 get 访问器,该访问器返回一个静态字段,用于计算生成的 Employee 对象的数量。

2) 只写属性

在 C# 编程中,只写属性允许我们为字段赋值,但阻止外部读取器访问它。它只包含 set 访问器。

语法

它具有以下语法:

C# 只写属性示例

让我们举一个例子来说明 C# 中的只写属性。

示例

编译并运行

输出

Hashed Password (internal use): U2VjdXJlMTIz

说明

在此示例中,我们使用了 UserAccount 类,该类定义了一个只写属性 Password,其中包含一个 set 访问器,该访问器在内部对密码进行编码和存储。它避免了外部程序访问关键数据,从而在允许受控输入的同时保证了安全性。

3) 读写属性

读写属性是 C# 属性中最流行的类型。它实现了 get 和 set 访问器,允许读写操作。

语法

它具有以下语法:

C# 只读属性示例

让我们举一个例子来说明 C# 中的只读属性。

示例

编译并运行

输出

Salary must be at least 30000.
Employee Name is: Alice
Employee Salary is: 45000

说明

在此示例中,我们使用了 Name 属性,它是一个自动实现的属性,允许直接读写。之后,Salary 属性使用私有支持字段和 get/set 访问器;set 访问器强制规定工资必须至少为 30,000,否则会显示警告。

4) 自动实现属性

在 C# 编程中,当属性访问器不需要任何额外逻辑时,自动实现属性会简化语法。编译器会创建一个隐式的匿名支持字段。

语法

它具有以下语法:

C# 自动实现属性示例

让我们举一个例子来说明 C# 中的自动实现属性。

示例

编译并运行

输出

The title of the book is: C# In Depth
The author's name is: Jon Skeet
The year of publication is: 2023

说明

在此示例中,Book 类的 Title、Author 和 YearPublished 属性是自动实现的,它们提供了直接的读写访问,而无需显式支持字段。

5) 静态属性

在 C# 中,静态属性分配给整个类,而不是任何单个实例。这意味着静态属性的值由类的所有对象共享。如果我们要使用静态属性,则还必须将支持字段(如果存在)设置为静态。静态属性经常用于实用程序类、全局设置和单例。

语法

它具有以下语法:

C# 静态属性示例

让我们举一个例子来说明 C# 中的静态属性。

示例

编译并运行

输出

Current Interest Rate: 4.5%
Current Interest Rate: 4.5%
Current Interest Rate: 5.0%
Current Interest Rate: 5.0%

说明

在此示例中,我们使用了 Bank 类中名为 InterestRate 的静态属性,该属性由类的所有实例共享。之后,输出显示更改静态属性会影响所有对象。

6) 抽象属性

在 C# 编程语言中,抽象属性是在抽象类或接口中声明但未实现的属性。它要求派生类覆盖并实现属性访问器。它促进了结构的一致性,同时允许子类具有独特的行为。

C# 抽象属性示例

让我们举一个例子来演示 C# 中的抽象属性。

示例

编译并运行

输出

Circle Area: 78.5398163397448
Circle Perimeter: 31.4159265358979

说明

在此示例中,我们使用了抽象类 Shape,它声明了两个抽象属性:area 和 perimeter,但未实现它们。Circle 类派生自 Shape 并根据半径实现这些属性的具体逻辑。

结论

总之,C# 属性提供了一种访问和管理类字段的有效方法,同时保持了封装和抽象的原则。它们允许我们控制数据如何读取、写入或计算,而无需暴露内部实现细节。借助不同类型的属性,C# 提供了处理各种场景的灵活性。在理解 C# 属性后,我们可以编写更安全、更易于维护和更易于理解的代码。

C# 属性常见问题

1) C# 中的属性是什么?

在 C# 编程语言中,属性是一种类成员,它提供了一种灵活的方法来读取、写入或计算私有字段的值。

2) C# 中的属性可以只读或只写吗?

是的,如果使用 get 访问器,它允许只读。另一方面,如果使用 set 访问器,它允许只写。

3) 什么是自动实现属性?

在 C# 中,这是一种快捷方式,编译器会自动生成支持字段。

4) C# 中的属性可以在 get/set 中包含逻辑吗?

是的,属性可以包含用于验证或计算的自定义逻辑。

5) C# 中的属性是方法还是变量?

在 C# 中,属性是特殊的方法,可以像访问字段一样访问,这为我们提供了类似方法的控制,但使用字段语法。


下一主题C# 继承