摘要:Effective C# 原则15:使用using和try/finally来做资源清理Item 15: Utilize using and TRy/finally for Resource Cleanup 使用非托管资源的类型必须实现IDisposable接口的Dispose()方法来精确的释放系统资源。.Net环境的这一规则使得释放资源代码的职责是类型的使用者,而不是类型或系统。因此,任何时候你...
阅读全文
摘要:Effective C# 原则14:使用构造函数链Item 14: Utilize Constructor Chaining 写构造函数是一个反复的工作。很多开发人员都是先写一个构造函数,然后复制粘贴到其它的构造函数里,以此来满足类的一些重载接口。希望你不是这样做的,如果是的,就此停止吧。有经验的C++程序可能会用一个辅助的私有方法,把常用的算法放在里面来构造对象。也请停止吧。当你发现多重构造函...
阅读全文
摘要:Effective C# 原则13:用静态构造函数初始化类的静态成员Item 13: Initialize Static Class Members with Static Constructors (译注:initializer在上文中译为了“初始化器”,实在不好听,本文中全部改译为:“预置方法”)你应该知道,在一个类型的任何实例初始化以前,你应该初始化它的静态成员变量。在里C#你可以使用静态的...
阅读全文
摘要:Effective C# 原则12:选择变量初始化而不是赋值语句Item 12: Prefer Variable Initializers to Assignment Statements (译注:根据我个人对文章的理解,我把initializer译为:初始化器,它是指初始化语法,也就是在一个类里声明变量的同时,直接创建实例值的方法。例:object m_o = new object();如果这...
阅读全文
摘要:Chapter 2. .NET Resource Management第二章:.Net资源管理 一个简单的事实:.Net应用程序是在一个托管的环境里运行的,这个环境和不同的设计器有很大的冲突,这就才有了Effective C#。极大限度上的讨论这个环境的好处,须要把你对本地化环境的想法改变为.Net CLR。也就意味着要明白.Net的垃圾回收器。在你明白这一章里所推荐的内容时,有必要对.Net的内...
阅读全文
摘要:Effective C# 原则11:选择foreach循环Item 11: Prefer foreach Loops C#的foreach语句是从do,while,或者for循环语句变化而来的,它相对要好一些,它可以为你的任何集合产生最好的迭代代码。它的定义依懒于.Net框架里的集合接口,并且编译器会为实际的集合生成最好的代码。当你在集合上做迭代时,可用使用foreach来取代其它的循环结构。检...
阅读全文
摘要:Effective C# 原则10: 明白GetHashCode()的缺陷Item 10: Understand the Pitfalls of GetHashCode() 这是本书中唯一一个被一整个函数占用的原则,你应该避免写这样的函数。GetHashCode()仅在一种情况下使用:那就是对象被用于基于散列的集合的关键词,如经典的HashTable或者Dictionary容器。这很不错,由于在...
阅读全文
摘要:Effective C# 原则9:明白几个相等运算之间的关系(译)Item 9: Understand the Relationships Among ReferenceEquals(), static Equals(), instance Equals(), and operator== 明白ReferenceEquals(), static Equals(), instance Equals(...
阅读全文
摘要:我是从网上搜索到的,大家也应该可以搜索的到。有人找我要,可是又没有留联系方法。我就打个包发上来了。仅供学习参考!http://www.cnblogs.com/Files/WuCountry/Effective.C.Sharp.zip
阅读全文
摘要:Effective C# 原则8:确保0对于值类型数据是有效的Ensure That 0 Is a Valid State for Value Types .Net系统默认所有的对象初始化时都为0。这并没有提供一个方法来预防其他程序员创建的值类型数据的实例在初始化是都是0。请让你的数据类型默认值也是0。 一个特殊情况是在枚举类型数据中。决不要创建一个不包括0在内的枚举类型。所有的枚举类型都是从Sy...
阅读全文
摘要:Effective C# 原则7: 选择恒定的原子值类型数据Prefer immutable automic value type 恒定类型(immutable types)其实很简单,就是一但它们被创建,它们(的值)就是固定的。如果你验证一些准备用于创建一个对象的参数,你知道它在验证状态从前面的观点上看。你不能修改一个对象的内部状态使之成为无效的。在一个对象被创建后,你必须自己小心翼翼的保护对象...
阅读全文
摘要:Effective C# 原则6:区别值类型数据和引用类型数据Item 6: Distinguish Between Value Types and Reference Types 值类型数据还是引用类型数据?结构还是类?什么你须要使用它们呢?这不是C++,你可以把所有类型都定义为值类型,并为它们做一个引用。这也不是Java,所有的类型都是值类型。你在创建每个类型实例时,你必须决定它们以什么样的形...
阅读全文
摘要:Effective C# 原则5:始终提供ToString()(部分翻译)Always Provide ToString() 在.Net世界里,用得最多的方法之一就是System.Object.ToStrying()了。你应该为你所有的客户写一个“通情达理”的类(译注:这里是指这个类应该对用户友好)。要么,你就迫使所用类的用户,去使用类的属性并添加一些合理的易读的说明。这个以字符串形式存在,关于你...
阅读全文
摘要:Item 4: Use Conditional Attributes Instead of #if 原则4:用条件属性而不是#if 使用#if/#endif 块可以在同样源码上生成不同的编译(结果),大多数debug和release两个版本。但它们决不是我们喜欢用的工具。由于#if/#endif很容易被滥用,使得编写的代码难于理解且更难于调试。程序语言设计者有责任提供更好的工具,用于生成在不同运行...
阅读全文
摘要:Effective C# Item3 Prefer the is or as operators to casts.原则3:选择is或者as操作符而不是做强制类型转换 C#是一个强数据类型语言。好的编程实践意味着当可以避免从一种数据类型强制转化为另种数据类型时,我们应该尽我们的所能来避免它。但在某些时候,运行时类型检测是不可避免的。在C#里,大多数时候你要为调用函数的参数使用System.Obje...
阅读全文
摘要:第二条:为你的常量选择readonly而不是const(译)对于常量,C#里有两个不同的版本:运行时常量和编译时常量。因为他们有不同的表现行为,所以当你使用不当时,将会损伤程序性能或者出现错误。两害相权取其轻,当我们不得不选择一个的时候,我们宁可选择一个运行慢一点但正确的那一个,而不是运行快一点但有错误的那个。基于这个理由,你应该选择运行时常量而不是编译时常量(译注:这里隐藏的说明了编译时常量效率...
阅读全文
摘要:Effective C# 原则1:尽可能的使用属性(property),而不是数据成员(field)。 我们的目标:尽可能编写出运行效率更高,更健壮,更容易维护的C#代码。 原则一:尽可能的使用属性(property),而不是数据成员(field)。 Always use properties instead of accessible data members. 出于以下几点原因,请在设计类时,...
阅读全文