《Effective C#》读书笔记(1)

        Bill Wagner先生的《Effective C#》一书保持作者一贯的风格,很值得我们一读。很早就想把读此书的感想写出来,一直没有时间,最近总算比较轻闲,借此写出读此书的心得,水平有限,希望对大家有所帮助

        Item 1: Always Use Properties Instead of Accessible Data Members
        第一项:永远使用属性而不要直接访问数据成员

        说到属性,大家肯定都知道。
        比如:        
        class Person
        { 
              
private string name; 
              
public string Name 
               { 
                  
get { return this.name;} 
                  
set { this.name=value;} 
               } 
        }

        具体属性能给我们带来什么好处呢?为什么必须使用属性来访问而不直接使用public来访问呢?这些肯定是大家最想知道的。 
        
        在本Item中,介绍了使用属性可以为我们带来以下的好处。 
        1、对赋值进行校验或者其他的处理。
        2、遵守封装原则。
        3、便于做线程同步访问。
        4、支持虚属性、抽象属性,并且可以在接口中使用。
        5、在C#2.0中,属性的get,set方法将支持不同的访问权限。

        那我们为什么要使代码复杂话来使用属性,而不直接使用public来访问,这样不是简单的多吗?不少人都有这样的疑惑。让我们来
看看通过属性访问和public来访问有什么区别。
        
        首先来看看使用public访问,当我们建立类的实例后,这时将会为public的字段分配动态内存。
        
        而通过属性访问,在定义1个属性的时候,编译器会在生成的托管模块中产生以下3项:
        ·1个表示属性的get访问器的方法,只有定义了get访问器方法才会创建
        ·1个表示属性的set访问器的方法,只有定义了set访问器方法才会创建
        ·1个位于托管模块元数据中的属性定义。

        在我们使用属性的时候,Get and Set都被标注为hidebysig, specialname。也就是说它们不能被C#源代码直接调用,它们也不是正是的类
型定义。你只能通过
Property来访问它们。JIT编译器会将属性访问的代码进行内联(inline)处理,这样使用属性时就不会再有运行时的性
能损失(相对与字段访问来讲)。但要注意的是,只有对那些执行时间比较短的操作我们才应该使用属性,而对于执行时间长的就应该使
用方法。

        PS:内联是指将1个方法内的代码直接编译到调用它们的方法中,从而消除调用方法时的运行负担,但它的代价时编译后的方法代码
变得比较庞大。由于属性的访问器方法通常含有比较少的代码,所以内联它们会使代码变得更小,执行效率更高!
       

posted @ 2005-08-07 00:15  jierry  阅读(1418)  评论(10编辑  收藏  举报