Effective C# 学习笔记(原则一:始终能的使用属性(property),而不是可直接访问的Data Member)
原则一:始终能的使用属性(property),而不是可直接访问的Data Member
Always use properties instead of accessible data members.
为什么要使用属性:
1.Net的data binding只支持Property,而不支持public data member的访问
Data binding的目的就是把一个object的Property绑定到一个用户界面的control上,web control或者windows form control. Data binding是通过reflection来实现的,
如下例: textBoxCity.DataBindings.Add("Text", address, "City");
这段code就是把textBoxCity的Text Property绑定到address这个object的City Property上。
如果你把address的City Property改成public data member,这段code是不会运行的。
2.当有新的需求时,通过修改Property的实现方法来适应这个新的需求,要比在你的程序里修改所有的public data member去适应这个需求容易太多了。
比如说你以前定义了一个类customer,现在你发现由于当初的粗心没有强制customer姓名不能为空,如果你使用了Property,你可以非常轻松的添加一个检查机制,
如下面这段code:
public class Customer
{
private string name;
public string Name
{
get
{
return name;
}
set
{
if ((value == null) || (value.Length == )) {
throw new ArgumentException("Name can not be blank", "Name");
}
name = value;
}
}
//...
}
如果你使用了public data member,你就要找遍你的程序,在每个地方都修改
3.Property是用methods实现的,所以添加multi-threaded的支持是非常方便的。
比如想要添加同步访问的支持:
public class Customer
{
private string name;
public string Name
{
get
{
lock (this)
{
return name;
}
}
set
{
lock (this)
{
name = value;
}
}
}
}
4..Property是用methods实现的,所以它拥有methods所拥有的一切。Property可以被定义为virtual:
你也可以把Property扩展为abstract,甚至成为interface的一部分。
总结:
总而言之,当你想让你类内部的数据被外界访问到时(不管是public还是protected),一定要用Property。
对于序列和字典,使用indexer。你类的data member永远应该是private,绝无例外。
使用Property,你可以得到如下好处:
1.Data binding支持
2.对于需求变化有更强的适应性,更方便的修改实现方法
记住,现在多花1分钟使用Property,会在你修改程序以适应设计变化时,为你节约n小时。
Effective C# 学习笔记(原则一:始终能的使用属性(property),而不是可直接访问的Data Member)的更多相关文章
- Effective C# 学习笔记(原则二:为你的常量选择readonly而不是const)
原则二.为你的常量选择readonly而不是const Prefer readonly to const 对于常量,C#里面有两个不同的版本:运行时常量(readonly)和编译时常量(co ...
- Effective STL 学习笔记: Item 22 ~ 24
Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...
- Effective STL 学习笔记 Item 21:Comparison Function 相关
Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...
- Effective STL 学习笔记 39 ~ 41
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value
Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...
- Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...
- Effective STL 学习笔记 32 ~ 33
Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 31:排序算法
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 Item 30: 保证目标区间足够大
Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...
随机推荐
- vc读写注册表
注册表是Windows重要组成部分,注册表记录了大量有关电脑软硬件的信息.注册表中的值通过其名称标识.值名称由与键名相同的字符组成.值本身可以是字符串.二进制数据或者是32位无符号值.在这里我们主要运 ...
- Iptables 防火墙开放常见的22,53,80端口
用iptables防火墙 iptables -F # 允许包从22端口进入 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许从22端口进入的包返回 ...
- unity3d学习重点记录
本文主要是记录在学习unity3d中遇到的重点功能的实现,以及一些API的使用方法.以便在以后使用到的时候查找. 1,给一个UIButton添加执行的事件 // Use this for initia ...
- yii学习小结
对yii框架搭建的平台运维过程中,会不断地发现很多新的特性和问题,现一一记录下来,便于后续学习~ 1.日志 在/runtime目录中 参考:http://www.cnblogs.com/you ...
- 应用OpenCV进行OCR字符识别
opencv自带一个字符识别的例子,它的重点不是OCR字符识别,而主要是演示机器学习的应用.它应用的是UCI提供的字符数据(特征数据). DAMILES在网上发布了一个应用OpenCV进行OCR的例子 ...
- c# 将页面导出到word(含图片及控件)
/// <summary> /// 创建word /// <param name="filePath">文件路径 </param> /// &l ...
- 设置lable文本内容的行间距
NSMutableParagraphStyle *paragraphStyle =[ [NSMutableParagraphStyle alloc] init]; paragraphStyle.lin ...
- (笔记)angular material 选项卡用法
- Secure your iPhone with 6 digit passcode by upgrading to iOS9
IP-Box could crack 4 digit passcode, what about 6 digit passcode??? All you need to do is to upgrade ...
- fstab
开机后,挂载windows盘失败, 进入了一个检测shell,该shell下是以只读方式挂载根分区的,要使fstab可写,要执行mount -o remount,rw / /etc/fstab文件的解 ...