C#属性:从基础到高级应用

张开发
2026/4/11 7:31:08 15 分钟阅读

分享文章

C#属性:从基础到高级应用
C# 属性借助C#语言所定义的语法,开发人员能够编写出准确表达其设计意图的代码。访问属性时,其行为类似于字段。 但与字段不同的是,属性通过访问器实现;访问器用于定义访问属性或为属性赋值时执行的语句。属性语法属性语法是字段的自然延伸。 字段定义存储位置:publicclassPerson{publicstringFirstName;// Omitted for brevity.}属性定义包含get和set访问器的声明,这两个访问器用于检索该属性的值以及对其赋值:publicclassPerson{publicstringFirstName{get;set;}// Omitted for brevity.}上述语法是自动属性语法。 编译器生成支持该属性的字段的存储位置。 编译器还实现get和set访问器的正文。有时,需要将属性初始化为其类型默认值以外的值。 C# 通过在属性的右括号后设置值达到此目的。 对于 FirstName 属性的的初始值,你可能更希望设置为空字符串而非 null。 可按如下所示进行指定:publicclassPerson{publicstringFirstName{get;set;}=string.Empty;// Omitted for brevity.}特定初始化对于只读属性最有用,本文后面部分将进行介绍。你也可以自行定义存储,如下所示:publicclassPerson{publicstringFirstName{get{return_firstName;}set{_firstName=value;}}privatestring_firstName;// Omitted for brevity.}属性实现是单个表达式时,可为 getter 或 setter 使用 expression-bodied 成员:publicclassPerson{publicstringFirstName{get=_firstName;set=_firstName=value;}privatestring_firstName;// Omitted for brevity.}在本文中,将在所有适用之处使用此简化的语法。上述属性定义是读-写属性。 注意 set 访问器中的关键字 value。 set 访问器始终具有一个名为 value 的参数。 get 访问器必须返回一个值,该值可转换为该属性的类型(本例中为 string)。这就是该语法的基础知识。 有许多不同的语法变体,支持着各种不同的设计习惯。 接下来我们将了解这些变体,以及每个变体的语法选项。验证上述示例介绍了属性定义中最简单的一种情况:不进行验证的读-写属性。 通过在 get 和 set 访问器中编写所需的代码,可以创建多种不同的方案。可以在 set 访问器中编写代码,确保由某个属性表示的值始终有效。 例如,假设 Person 类的一个规则是姓名不得为空白或空白符。 可按如下方式编写:publicclassPerson{publicstringFirstName{get=_firstName;set{if(string.IsNullOrWhiteSpace(value))thrownewArgumentException("First name must not be blank");_f

更多文章