前言:
翻译此篇Effective的目的在于
1. 培养自己的耐心与毅力,改掉自己看一本书总是喜欢看开头的恶习;
2. 顺便练习自己的英文阅读能力,养成看英文文档的习惯;
3. 也算一个技术积累,毕竟自己看过与写出来所记忆的深刻程度会大不相同.
我的英文水平也相当的差,且平时专业的英文积累也不太多,所以在翻译过程中很可能出现许多词不达意的地方或者专业术语翻错的地方,还请见谅及纠正,在此表示感谢!
第一章 C#语言基础
1.使用属性(Properties) 代替可访问数据成员(Data Member)
属性的其中一种用法:.Net Framework 假设为你的公开数据成员使用属性代替.事实上,.NET Framwork中的数据绑定支持属性,但不支持公开数据成员.数据绑定将一个对象的属性绑定到用户控件或者Web Control或Windows Control等.数据绑定机制采用反射以找到该类型的属性,比如以下代码:
首先,新建一个City类
public class City
{
public City(){}
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value == "重庆")
{
_name = value + "(CQ)";
}
}
}
}
这个类的功能就是提供一个属性,供客户端调用
此时我们如果需要将该属性绑定到控件到控件时,可以用如下代码
City city = new City();
City.Name = “重庆”;
this.txb_CityName.DataBindings.Add("Text",city,"Name");
当然这并不意味着属性只能运用在数据绑定上,属性也可以被用到类或者结构内,当你的业务逻辑有任何新的变化时能较快的随着更改.
比如起初有个Custome类
public class Customer
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
}
它提供顾客的名字设置与访问,当有一天需求变化,顾客姓名不能为空时,如果你使用数据访问成员,那么需要在系统中每个使用到该成员的地方进行判断修改,而如果你采用属性的方式,仅仅需要在类的set处更改规则:
set
{
if (( value == null ) || ( value.Length == 0 ))
throw new ArgumentException( "Name cannot be blank","Name");
_name = value;
}
这样简单的更改就能满足新的变化.
当你看了属性生成的IL(ILDASM)之后,你可能想知道属性和数据成员相比较而已谁的性能更好.
其实属性并不比数据成员更快,但也不可能比数据成员更慢.
在任何想让你的数据公开的时候,你都应该使用属性,索引.所有的数据成员都应该是私有的无任何例外.你应该立刻支持数据绑定,属性访问,它可以使你在以后更改当中变得更容易.现在将一个成员转成一个属性可能会花你一点时间,但是以后的成效将事半功倍.