【C#高效编程50例】条目1:使用属性而不是可访问的数据成员
2015-09-30 10:34
609 查看
书名:《C#高效编程 改进C#代码的50个行之有效的方法》
条目1 使用属性而不是可访问的数据成员
1 属性格式
2 可以为Set get 指定不同的访问权限, 如 为get指定私有的
3 属性比数据成员易于维护、修改,比如用户名不能为空,则在属性里直接加现在就可以
4 支持多线程,可以在属性里是实现同步
5 像方法一样,可以为Virtual的
7 get 和 set 作为两个方法,独立的编译
8 支持参数的属性:索引器
9 属性和数据成员在代码层面上是兼容的,但是在二进制层面上不一样。
属性和数据成员的访问,也会生成不同的MSIL,微软中间语言指定。
访问属性和访问数据成员的性能差距很小。
属性的访问器里不应该进行长时间的计算,因为用户期待访问属性就像访问数据成员一样。
条目1 使用属性而不是可访问的数据成员
1 属性格式
private string _scustomerName = string.Empty; public string CustomerName { get { return _scustomerName; } set { _scustomerName = value; } }
2 可以为Set get 指定不同的访问权限, 如 为get指定私有的
private string _scustomerName = string.Empty; public string CustomerName { private get { return _scustomerName; } set { _scustomerName = value; } }
3 属性比数据成员易于维护、修改,比如用户名不能为空,则在属性里直接加现在就可以
private string _scustomerName = string.Empty; public string CustomerName { private get { return _scustomerName; } set { if (string.IsNullOrEmpty(value)) { throw new Exception("Customer can not be blank.", "Name"); } _scustomerName = value; } }
4 支持多线程,可以在属性里是实现同步
private object obj = new object(); private string _scustomerName = string.Empty; public string CustomerName { private get { lock (obj) return _scustomerName; } set { if (string.IsNullOrEmpty(value)) { throw new Exception("Customer can not be blank.", "Name"); } lock (obj) _scustomerName = value; } }
5 像方法一样,可以为Virtual的
public virtual string CustomerName { get; set; }6 也可以声明为抽象的 abstract
public interface INameValuePair<T> { string Name { get; } T Value { get; set; } }
7 get 和 set 作为两个方法,独立的编译
8 支持参数的属性:索引器
public int this[int index] { get { return theValue[index]; } set { theValue[index] = value; } }
9 属性和数据成员在代码层面上是兼容的,但是在二进制层面上不一样。
属性和数据成员的访问,也会生成不同的MSIL,微软中间语言指定。
访问属性和访问数据成员的性能差距很小。
属性的访问器里不应该进行长时间的计算,因为用户期待访问属性就像访问数据成员一样。
相关文章推荐
- C# Cache的类方法
- C#调用文件夹选择窗口或文件选择窗口
- 为textbox控件添加水印
- C#生成安装文件
- Control.CreateGraphics的实现[C#]
- 写给请求推荐C#视频教程的研二学生
- 【傻傻分不清楚】C#const与readonly
- Win7下用C#开发windows服务
- C#精髓 第四讲 GridView 72般绝技
- 用C#.NET 与Webdriver写的抓取网页信息的小工具
- C#如何分割有IP+端口的字符串?
- C#对.CSV格式的文件--逗号分隔值文件 的读写操作及上传ftp服务器操作方法总结
- C#面向对象设计模式纵横谈——1.面向对象设计模式与原则
- C#定时器,定时做什么事情
- C# 5.0新推出的async和await
- C#相关开发视频
- C#如何加载程序运行目录外的程序集 (转)
- 字符串与数字进行转换[C#]
- c#中如何操作消息队列
- C#几个经常用到的字符串截取