Effective C#系列 文章目录

很老的一个系列了,不过写的很好,发现园子里没有,转载过来,方便大家。
 
第一部分是语言使用的基础,而这是使用语言的基本功,也是平常最不注意的,养成好的习惯,有利于后期水平提高。

这部分包括11个单元,分别如下:
Item 1:
Always Use Properties Instead of Accessible Data Members

Effective C# 用属性来访问类的私有成员

Item 2:
Prefer readonly to const

Effective C# 定义常量的两种方法

Item 3:
Prefer the is or as Operators to Casts

Effective C# 使用as和is操作符来做类型转换

Item 4:
Use Conditional Attributes Instead of #if

Effective C# 使用Conditional属性来代替IF/ENDIF程序块

Item 5:
Always Provide ToString()

Effective C# 提供一个有意义的ToString函数

Item 6:
Distinguish Between Value Types and Reference Types

Effective C# 区分值类型和引用类型

Item 7:
Prefer Immutable Atomic Value Types

Effective C# 推荐使用不可改变的原子值类型

Item 8:
Ensure That 0 Is a Valid State for Value Types

Effective C# 确保“0”在值类型中是有效的

Item 9:
Understand the Relationships Among ReferenceEquals(), static Equals(),
nstance Equals()
Effective C# 区别和认识四个判等函数
   
Item 10:
Understand the Pitfalls of GetHashCode()

Effective C# 小心GetHashCode函数所存在的陷阱

Item 11:
Prefer foreach Loops

Effective C# 提倡使用foreach语句来进行循环操作

文章中提到一些好的方法,以及各个方法的细微之处,都是不错的。不过建议大家如果有机会的话,还是买本原书来看。

如果文章有什么不当之处,或者对文章有什么好的建议的话,可以来信告诉我,我会在下一部分编写过程中加以注意。至于下部分的进度,为了保证文章的质量,所以我会把一周的文章数控制在三篇以内。

 

 

第二部的主题在于资源管理,.Net编写的程序以托管程序居多,但是并不意味着可以不注意细节,合理的使用.Net提供的便利,加上好的习惯,有利于程序效率提高。

这部分包括7个单元,分别如下:

Item 12: Prefer Variable Initializers to Assignment Statements
Effective C# 推荐使用成员初始化语句

Item 13: Initialize Static Class Members with Static Constructors
Effective C# 使用静态构造函数初始化静态成员

Item 14: Utilize Constructor Chaining
Effective C# 使用构造函数初始化语句

Item 15: Utilize using and try/finally for Resource Cleanup
Effective C# 利用using和try-finally来释放资源

Item 16: Minimize Garbage
Effective C# 尽量减少垃圾产生的数量

Item 17: Minimize Boxing and Unboxing
Effective C# 减少装箱(Boxing)和拆箱(Unboxing)操作

Item 18: Implement the Standard Dispose Pattern
 
 
第三部部分:

C#语言为你的设计介绍了一种新的语法,你可以选择这种技术让你的设计与其它的开发人员进行交流,这些开发人员可以维护,扩展或者是使用你设计的软件。C#的所有类型都是生存在.Net环境下的,这个环境对于所有类型的兼容性做了一些好的假设。但如果你违反了这些假设,你就增加了类型不能正确工作的可能性。

这些原则不是那些已经出版了的软件设计技术的概要,相反,这些原则醒目的给出了怎样用不同的C#语言特性来表达最好的软件设计意图。C#语言的设计者添加了一些语言特性,用来更清楚的表达现代的软件设计习惯。具体的语言特性有什么杰出的地方是很微妙的,并且你经常会有很多可选的方法。更多的选择在一开始可能只是更好的方案,但随后,语言特性杰出的地方会展示出来,你会发现你有必要增强已经存在的程序。确保你能很好的理解这些原则,并且小心的应用它们,在你创建自己的系统时,注意那些最有可能增强(设计)的机会。

一些语法的改变会给你一些新的词汇,用来描述一些你每天都要使用的习惯。属性,索引器,事件,以及代理就是例子。它们与类和接口是不同的:类定义类型,接口声明行为。基类声明类型,并且为一些放在一起的相关类型定义一些常用的行为。因为垃圾回收器,另一些设计习惯已也经改变了;还有一些改变,是因为大多数变量是引用类型。

这一章里推荐的原则会帮助你为你的设计选择一些最自然的表达方法。这将让你能设计出更容易维护,更容易扩展,并且更容易使用的软件。
 
第四部分:

    创建二进制组件和创建类有很多相似之处:我们都在尝试区分和分割功能。它们的区别在于二进制组件可以用来描述那些离散的功能。我们可以创建组件程序集来实现简单的逻辑共享,跨语言编程和简单的程序发布。

      在.Net中程序集是一个组件包。每个程序集都可以被独立的发布和升级。升级一个已发布程序集的简易程度取决于对程序集中最小化耦合的处理是否得当。最小化耦合意味着我们不仅仅要最小化程序集中复杂的依赖关系,还要考虑便于升级版本。这章的主要内容就是如何创建易于使用、发布和更新的程序集。


      .Net的运行环境可以支持由多个二进制组件构成的程序集。我们可以独立更新其中的每一个。我们必须清楚CLR(公共语言运行库)是如何寻找和装载程序集的。在创建组件时我们必须遵循这种规则,否则就不能实现二进制组件的效果。下面的篇幅就是介绍这些的。


      CLR装载器并不会在程序开始运行时就装载所有的程序集引用。而是在运行需要时再由装载器处理该程序集引用。这可能是由方法调用或者数据访问。装载器寻找程序集引用并装载,实时编译需要的IL。


      当CLR需要装载一个程序集时,第一步时检测需要装载的文件。程序集的元数据中记录了它所有的引用。这些记录有强名称和弱名称之分。对于一个强名称程序集这种记录包含4个部分:程序集的名称,版本号,支持的区域性和公钥。对于非强名称程序集来说就只有程序集的名称。使用强名称可以减少被恶意组件替换的可能性。强名称让我们可以使用配置文件设置所需组件的版本。


      在检测到正确的程序集名称和版本号之后,CLR会检测这个程序集是否已经被装载过。如果已经装载,那么就它就可以直接应用。否则CLR会继续寻找该程序集。如果该程序集是强名称的CLR首先在GAC(全局程序集缓存)中寻找。如果不在GAC中,装载器会检查配置文件中指定的文件夹。如果这个文件夹存在,那么只在这个文件夹中搜索需要的程序集。如果没有在这个文件夹中找到所需的程序集,那么装载失败。


Effective C# 尽可能实现短小简洁的函数


Effective C# 尽可能实现小尺寸、高内聚的程序集


Effective C# 限制类型的可见性


Effective C# 创建大粒度的Web API

 

 

 

第五部分:

我的同事,也是我的朋友Martin Shoemaker研究一个很严肃的问题,那就是:“我必须写这样的.Net代码吗?” 答案是,也希望是:不。你应该使用你手头上有的,也是你会用的工具来帮助你写代码。

.Net框架是一个很丰富的类库,你对框架学习的越多,你自己要写的代码就越少。框架库会帮你完成很多工作。这一章就告诉你一些.Net框架里最常用的一些技术。当你在.Net框架中有多个选择时,这一章中的一些条款会帮助你选择最好的。你可以使用一些已经存在的东西来写你自己的类和算法,而不应该是与它们相抵触。

这一章中的一些条款反映一些算法和类,当一些开发者可以轻松的使用.Net框架的时候,这是他们决心要自己写的。他们之所以要自己写这些,这是因为,有些时候,.Net框架确实不清楚他们想要什么。这时,我会告诉你如何来扩展已经存在的核心功能。还有一些时候,因为他们不清楚核心时如何工作的;也有时候是因为他们对性能有过高的要求。

即使是使用.框架里所有可用的工具,也有很多的开发人员宁可创建他们自己的工具。千万别写这些代码,特别是已经有人完成了的。

Effective C# 重写优于事件处理器

Effective C# 合理使用.NET运行时诊断

Effective C# 使用标准配置机制

Effective C# 定制和支持数据绑定

Effective C# 使用.NET验证

Effective C# 根据需要选用恰当的集合

Effective C# 避免过度使用反射

Effective C# 利用特性简化反射

Effective C DataSet优于自定义结构

Effective C# 为应用程序创建特定的异常类

 

 

 

第六部分:

有些内容不合适专门做一个目录,但这并不是说它们不重要。对于每个人来说,理解代码的安全访问策略是很重要的,就像明白异常处理策略一样。其它的一些推荐资料是关于经常变化的一些东西,因为C#本身也是一门在发展的语言,要与最新的标准和资讯进行交流。这些变化值得注意一下,而且要为这些变化做准备,它们会在以后溶入到你的工作中。

Effective C# 优先选择强异常安全保证

Effective C# 优先选择安全代码

Effective C# 掌握相关工具与资源

Effective C# 为C# 2.0做准备

Effective C# 了解ECMA标准

posted @ 2008-10-19 12:07  瞪着你的小狗  阅读(1284)  评论(9编辑  收藏  举报