改善 C# 的语言习惯(一) - 使用属性而不是可访…
2018-06-23 23:47:31来源:未知 阅读 ()
改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员
序
为什么我们的程序运行得棒棒的,还要改呢?Why?
答:我们要让程序运行得更快,执行的效率更高,代码的可读性更强,维护的成本更低... ...。
目录
- 属性介绍
- 属性的另一种形式 - 索引器介绍
- 小结
属性
属性是 C# 中的一等公民。我们可以为 setter 和 getter 指定不同的访问权限,属性允许将数据成员作为公共接口的一部分暴露出去,与此同时,也能够进行一定的封装。
属性的使用跟数据成员的使用一样,但底层依然是通过方法来实现的。
我们在访问属性的时候,实际上调用的是方法的接口,所以可以享受到方法调用的所有好处。
其实,通过 VS 我们可以直接键入 prop + 两次 TAB 键,就可以快速完成属性的编写。
图1 隐式属性
一般来说,我们直接使用 C# 3 的隐式属性语法即可,并且不需要给 getter 和 setter 加上其它验证逻辑。
属性可以拥有方法的所有语言特性,如:使用 virtual,abstract 等关键字。
图2
我们也可以使用访问修饰符对 getter 和 setter 制定不同的访问权限,这样就可以更精妙的控制数据成员的可见性。
public int Id { get; protected set; }
我们可以通过 IL 代码对比下隐式属性语法所生成的代码和过去写法生成的代码有什么不同。
public class Person { public int Id { get; set; } private string _name; public string GetName() { return _name; } public void SetName(string name) { _name = name; } }
图3
从上图可知,隐式属性在 IL 也会生成类似 _name 的字段 <Id>k__BackingField(虽然名字有点奇葩),同时也会生成 getXX 和 setXX 方法。
索引器介绍
索引器又称含参属性(parameterized property)。this 是索引器的关键字。
【注意】所有的索引器都必须使用 this 关键字来进行声明,不能指定其他名称。即,对于同样的参数列表,只能,只允许有一个索引器。
当然,索引器也可以使用 virtual(虚),abstract(抽象)关键字。
同时,索引器的参数可以是一维数组,也可以是多维数组。
public class Person { public int Id { get; set; } public string Name { get; set; } public string this[int index] { get { return Name; } set { Name = value; } } public int this[string name] { get { return Id; } set { Id = value; } } public string this[int x, int y] { get { return Name; } set { Name = value; } } }
【原文】http://www.cnblogs.com/liqingwen/p/6294290.html
【博主】反骨仔
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 使用 Apache SSI(Server Side Includes) 制作多语言版静态网 2020-06-01
- CSS 预处理语言之 Scss 篇 2019-10-12
- CSS设计制作网页的经验 2019-09-23
- HTML概述 2019-09-23
- H5标签 2019-09-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash