《.NET程序员面试秘笈》----面试题4 举例说明属性、get和set访问器的使用

简介: 本例通过属性操作类中声明的私有字段_username,请注意在Name属性的get和set访问器中的逻辑操作。本例还有一个自动实现的属性,可读取用户输入的数据。在ch01目录下新建一个程序文件,并命名为GetSet.cs

本节书摘来自异步社区《.NET程序员面试秘笈》一书中的第1章,面试题4,作者: 张云翯, 更多章节内容可以访问云栖社区“异步社区”公众号查看。

面试题4 举例说明属性、get和set访问器的使用

.NET程序员面试秘笈
【考点】对属性(Property)的理解,C#中get和set访问器的编写方法,理解自动实现的属性。

【出现频率】

【解答】

本例通过属性操作类中声明的私有字段_username,请注意在Name属性的get和set访问器中的逻辑操作。本例还有一个自动实现的属性,可读取用户输入的数据。在ch01目录下新建一个程序文件,并命名为GetSet.cs,编写代码如程序1.5所示。

image

在命令行下编译GetSet.cs后,执行GetSet程序,其效果如图1.7所示。

image

本例中,首先创建Detail类的对象dt,将用户第1次输入数据赋值给dt对象的Name属性。在Name属性的set访问器中,用户输入的字符串前面拼接了“user-”字符串,然后赋值给_username字段。当读取Name属性时,get访问器将_username字段的值执行Substring(5)方法,将“user-”字符串去掉后返回。从整个过程来看,用户无法知道属性中数据经过了什么处理及数据最终存储在何处。而用户输入第2次数据,其值被写入Password属性,自动属性实现可将值写入匿名后备字段,读取时亦可直接返回其值。

说明:
本例仅展示了get和set访问器在属性中的使用,在索引器中使用方法是一样的。

【分析】

在前面的例子中使用了get和set访问器,通过访问器可以很方便地访问私有成员。其对外部暴露的部分可以为属性或索引器,属性比较常用。类体中的属性(Property)在使用时和一般的类成员没有区别,只是在内部实现的方法通过get和set访问器完成,这样更灵活、更隐蔽、更安全。其编写格式如以下代码所示:

访问修饰符 数据类型 属性名称
{
 get
 {
  [访问修饰符2] 相关数据操作;
 }
  [访问修饰符3] set
 {
  和value关键字有关的数据操作;
 }
}

当直接读取属性名称时,将会使用get访问器,执行“相关数据操作”的内容,相当于执行一个返回值为“数据类型”的方法。当直接赋值给属性名称时,被赋予的新值将替换隐式参数value,执行相关的数据操作。从代码中可知,get或set可添加访问修饰符,不过必须在get和set同时存在的情况下,且不能同时添加。当没有set访问器时,代表该属性为只读。

最常用的数据操作是读取和写入类中的私有字段(被称为后备字段),如果get和set访问器中不需要逻辑,仅仅通过属性完成赋值和写入值的功能,可以使用自动实现的属性。自动实现的属性可以提供比较简洁的格式,并且编译器将自动创建一个匿名后备字段(在类体中没有声明),其编写方法如以下代码所示:

访问修饰符 数据类型 属性名称{get;set}
访问修饰符 数据类型 属性名称{get;private set}

第1种自动实现的属性可直接读取和写入,使用者并不知道数据读取或写入了哪个字段(匿名后备字段)。第2种自动实现的属性为只读,无法写入。

注意:

属性提供了比较灵活的数据访问方法,读者编写代码时注意显式声明的set访问修饰符必须比属性修饰符更严格。get或set没有显式访问修饰符时,其默认访问限制和属性一致。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
16天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
6月前
|
数据采集 数据挖掘 程序员
2024年Python最全资深程序员:学Python我推荐你用这几款编辑器,2024年最新面试考哪些
2024年Python最全资深程序员:学Python我推荐你用这几款编辑器,2024年最新面试考哪些
2024年Python最全资深程序员:学Python我推荐你用这几款编辑器,2024年最新面试考哪些
|
6月前
|
算法 前端开发 JavaScript
2024年Python最全资深程序员对于Python各个方向的面试经验分享,非常给力!,2024年最新2024金三银四面试季
2024年Python最全资深程序员对于Python各个方向的面试经验分享,非常给力!,2024年最新2024金三银四面试季
|
2月前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
57 10
|
3月前
|
JavaScript 前端开发 小程序
CoderGuide 程序员前后端面试题库,打造全网最高质量题库
CoderGuide涵盖范围包括且不限于:前端面试题(Vue,React,JS,HTTP,HTML,CSS面试题等),后端面试题(Java,Python,Golang,PHP,Linux,Mysql面试题等),以及算法面试题,大厂面试题,高频面试题,校招面试题等,你想要的,这里都有!
65 2
|
5月前
|
前端开发 应用服务中间件 程序员
老程序员分享:Nginx相关面试题
老程序员分享:Nginx相关面试题
57 2
|
5月前
|
SQL JavaScript Java
java程序员面试题大全含答案(2018--2019)
java程序员面试题大全含答案(2018--2019)
|
6月前
|
前端开发 JavaScript 程序员
2024年最新65% 的程序员竟都是自学成才?_为啥学技术都自学,2024年最新42岁程序员面试
2024年最新65% 的程序员竟都是自学成才?_为啥学技术都自学,2024年最新42岁程序员面试
2024年最新65% 的程序员竟都是自学成才?_为啥学技术都自学,2024年最新42岁程序员面试
|
5月前
|
前端开发 程序员 JavaScript
9年程序员总结个人的面试技巧
9年程序员总结个人的面试技巧
41 2
|
5月前
|
安全 程序员 Shell
老程序员分享:NSIS自定义界面,下载并安装Net.Framework4.8
老程序员分享:NSIS自定义界面,下载并安装Net.Framework4.8