《Effective C# 精髓》摘选

  昨天买了一本《Effective C#》,看了几个Item,虽然没有当初读《Effective C++》时的那般震撼,但是也收获不少。把其中的要点记录于下,有些条款加上了自己的理解,权当作读书笔记吧 :-)

  Item 1: Always Use Properties Instead of Accessible Data Members

  这个是地球人都知道的条款了。你需要记住,属性是类的外部接口部分,而(公共)成员却是内部实现。如果把内部实现暴露给外部,对于以后类的实现变更是非常不利的。
  Item 2: Prefer readonly to const

  这个条款需要注意一下几点:

  (1)const在编译期发生作用,即编译器会将所有的const成员置换成对应的常量“值”。

  (2)即使引用其他程序集中的const成员,本程序集中也是硬编码了const成员的值。

  (3)readonly在运行期被评估,所以其性能比const稍差,但是灵活性更高。

  (4)const的值必须在编译期决定,所以不能使用new为其赋值。

  (5)更新一个公有的const成员的值应被视为接口改变,而更新一个readonly变量的值可视为内部实现的改变。

  Item 3: Prefer the is or as Operators to Casts

  (1)is或as称为“动态转换”,是尝试性的,如果失败,不会抛出异常。尽可能使用as操作符。该机制使用元数据完成功能。

  (2)Cast称为“强制转换”,如果失败,则抛出异常--代价高昂。

  (3)is、as、Cast转换都不会调用自定义的转换操作符。

  (4)is可以判断一个object是否为值类型,而as不行。

  (5)请注意Type.IsAssignableFrom()和Type.IsSubclassOf()方法,他们也是常用的“类型检测”手段。注意,Type.IsSubclassOf()方法不支持接口检测,而Type.IsAssignableFrom()支持。

  Item 4: Use Conditional Attributes Instead of #if

  使用#if常(可能)导致性能问题(如空方法调用)和程序对#if/#endif块代码的依赖问题。

  (1)使用Conditional Attributes修饰的方法总是会被编译到目标程序集中,无论是Release或Debug。

  (2)如果条件不满足该Conditional Attributes指定的条件,则编译器会忽略所有对其修饰的方法的调用。

  (3)被Conditional Attributes修饰的方法必须返回void,这是有道理的。因为我们的程序运行不能依赖被Conditional Attributes修饰的方法的返回值。否则,在不同的条件下,我们的程序将表现出非我们期望的不用行为。

  Item 5: Always Provide ToString()

  关于这一点,我在以往的项目中早有体会。举个例子,曾经我们需要把从数据库中取出的Customer列表绑定到ComboBox,开始时我们设计Customer时并没有重写ToString()方法,所以我们要这样做:

            //从数据库中挑出所有有效用户
            string whereStr = string.Format("where {0} = '1'" ,Customer._IsValid) ;
            Customer[] customers = (Customer[])DataEntrance.GetObjects(typeof(Customer) ,whereStr) ;
            ArrayList cusNameList = new ArrayList() ;
            foreach(Customer cus in customers)
            {
                cusNameList.Add(string.Format("{0} {1}" ,cus.ID ,cus.Name)) ;
            }
            //绑定
            this.comboBox1.DataSource = cusNameList ;
  如果为Customer重写ToString()方法,

        #region ToString 
        public override string ToString()
        {
            return this.ID.ToString() + " " + this.Name.ToString() ;
        }
        #endregion
  则只需要这样:

            string whereStr = string.Format("where {0} = '1'" ,Customer._IsValid) ;
            Customer[] customers = (Customer[])DataEntrance.GetObjects(typeof(Customer) ,whereStr) ;
            this.comboBox1.DataSource = customers ;
  这样就简便了好多,而且这样做还有一个好处,比如,从ComboBox从选取一个客户时,以前需要这样:

            string cusID = this.comboBox1.SelectedItem.ToString().Split(' ')[0] ;
            Customer desCus = null ;
            foreach(Customer cus in customers)
            {
                if(cus.ID = cusID)
                {
                    desCus = cus ;
                    break ;
                }
            }
  现在,简单多了,一行代码搞定。

Customer desCus = this.comboBox1.SelectedItem as Customer ;

时间: 2024-08-17 14:20:39

《Effective C# 精髓》摘选的相关文章

Effective C# 精髓 (待续)

    昨天买了一本<Effective C#>,看了几个Item,虽然没有当初读<Effective C++>时的那般震撼,但是也收获不少.把其中的要点记录于下,有些条款加上了自己的理解,权当作读书笔记吧 :-) Item 1: Always Use Properties Instead of Accessible Data Members    这个是地球人都知道的条款了.你需要记住,属性是类的外部接口部分,而(公共)成员却是内部实现.如果把内部实现暴露给外部,对于以后类的实现

Effective C#教程

Effective C#原则1:尽可能的使用属性(property),而不是数据成员(field) Effective C#原则2:为你的常量选择readonly而不是const Effective C#原则3:选择is或者as操作符而不是做强制类型转换 Effective C#原则4:用条件属性而不是#if预编译块 Effective C#原则5:始终提供ToString() Effective C#原则6:区别值类型数据和引用类型数据 Effective C#原则7: 选择恒定的原子值类型数

《OOD启思录》目录—导读

版权声明OOD启思录Authorized translation from the English language edition, entitled OBJECT-ORIENTED DESIGN HEURISTICS (PAPERBACK), 1E, 9780321774965 by RIEL, ARTHUR J., published by Pearson Education, Inc, publishing as Addison-Wesley Professional, Copyrigh

怎样使用AJAX进行应用程序开发

ajax|程序 游客,您好!转网通站 | 转电信站 积木首页 | 500多种网页特效整理 | 实用查询函数手册 | 积木网BT下载联盟 | 经典笑话 | 广播电台 | 高清晰经典图片素材   程序开发  网页设计  搜索引擎  特效代码  操作系统  防范病毒  黑客技术  图形图象  电脑硬件  网络技术  服 务 器  数 据 库  网文精粹       您的位置:积木首页 >> 程序开发频道 >> Ajax技术 >> 正文:  标题:怎样使用AJAX进行应用程序开

AJAX编程实践之与服务器通信

ajax|编程|服务器 游客,您好!转网通站 | 转电信站 积木首页 | 500多种网页特效整理 | 实用查询函数手册 | 积木网BT下载联盟 | 经典笑话 | 广播电台 | 高清晰经典图片素材   程序开发  网页设计  搜索引擎  特效代码  操作系统  防范病毒  黑客技术  图形图象  电脑硬件  网络技术  服 务 器  数 据 库  网文精粹       您的位置:积木首页 >> 程序开发频道 >> Ajax技术 >> 正文:  标题:AJAX编程实践之与服

jQuery选择器总结

一. 什么是jQuery选择器 在Dom编程中我们只能使用有限的函数根据id或者TagName获取Dom对象. 在jQuery中则完全不同,jQuery提供了异常强大的选择器用来帮助我们获取页面上的对象, 并且将对象以jQuery包装集的形式返回. 首先来看看什么是选择器:     //根据ID获取jQuery包装集   var jQueryObject = $("#testDiv"); 上例中使用了ID选择器, 选取id为testDiv的Dom对象并将它放入jQuery包装集, 最后

图标设计理论:多形态标志是未来趋势

文章描述:标志在表现形势上值得瞩目的就是"多形态"标志的不断涌现. 近年来,标志在表现形势上值得瞩目的就是"多形态"标志的不断涌现. 但要首先明确一下, 有些人会将部分这类标志称作"动态标志",但这与我们本文所探讨的并不完全一致,因为,我们所说的"多形态",更多的是指标志形象的表现形式与传统的静态标志相对的一种形态,它的表现形式是不固定的,流动的.因为这里涉及到一点:并非所有"动"的标志,都是我们本文所指的

(续前)SQLServer常见问题应对

server|sqlserver|问题 (续前)SQLServer常见问题应对 版权所有ashuixu转载请保持完整并注明出处 SQL语句部分 5."令人头疼"的日期处理 问题:你是否也有过面对日期处理时的彷徨无措么? 解答:你是否了解以下事实(摘选自SQLServer2000联机帮助-datetime 数据类型:概述): A.日期的存储. datetime 从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确度为百分之三秒(等于 3.33 毫秒或

网站设计用户体验设计的体验点详细流程

网站体验谈的很多,但许多都觉得网站体验很飘渺,很难具体都每一点,那么本文可能会将所有与网站体验有关的一些体验点详细梳理整理,一种总结了76点,分五大类,做为网页设计都不可错过的好资料 近期自己跟同事一起在做一个网站的报表系统,之前不是做这个项目的时候,虽然也会提用户体验,但针对网站这块的用户体验,还是做了之后才有很深的了解.昨天在与朋友聊天时,他推荐我看了一篇关于网站体验的文章,现摘选一点,与大家共同学习: 网站体验,指的是利用网络特性,为客户提供完善的网络体验,提高客户的满意度,从而与客户建立