Welcome 微信登录

首页 / 软件开发 / C#

Effective C#原则1:尽可能的使用属性(property),而不是数据成员(field)

Effective C#原则1:尽可能的使用属性(property),而不是数据成员(field)

Effective C#原则1:尽可能的使用属性(property),而不是数据成员(field)2010-12-09 博客园 Wu.Country@侠缘译我们的目标:尽可能编写出运行效率更高,更健壮,更容易维护的C#代码。原则一:尽可能的使用属性(property),而不是数据成员(field)。Always use properties instead of accessible data members.出于以下几点原因,请在设计类时,尽可能的使用属...
Effective C#原则2:为你的常量选择readonly而不是const

Effective C#原则2:为你的常量选择readonly而不是const

Effective C#原则2:为你的常量选择readonly而不是const2010-12-09 博客园 Wu.Country@侠缘译对于常量,C#里有两个不同的版本:运行时常量和编译时常量。因为 他们有不同的表现行为,所以当你使用不当时,将会损伤程序性能或者出现错误 。两害相权取其轻,当我们不得不选择一个的时候,我们宁可选择一个 运行慢一点但正确的那一个,而不是运行快一点但有错误的那个。基于这个理由 ,你应该选择运行时常量而不是编译时常量(译注:这里隐...
Effective C#原则3:选择is或者as操作符而不是做强制类型转换

Effective C#原则3:选择is或者as操作符而不是做强制类型转换

Effective C#原则3:选择is或者as操作符而不是做强制类型转换2010-12-09 博客园 Wu.Country@侠缘译C#是一个强数据类型语言。好的实践意味着当可以避免从一种数据类型 强制转化为另种数据类型时,我们应该尽我们的所能来避免它。但在某些时候, 运行时类型检测是不可避免的。在C#里,大多数时候你要为调用函数的参数使用 System.Object类型,因为Framwork已经为我们定义了函数的原型。你很可能要 试图把那些类型进行向下转...
Effective C#原则4:用条件属性而不是#if预编译块

Effective C#原则4:用条件属性而不是#if预编译块

Effective C#原则4:用条件属性而不是#if预编译块2010-12-09 博客园 Wu.Country@侠缘译使用#if/#endif 块可以在同样源码上生成不同的编译(结果),大多数debug 和release两个版本。但它们决不是我们喜欢用的工具。由于#if/#endif很容易 被滥用,使得编写的代码难于理解且更难于调试。程序语言设计者有责任提供更 好的工具,用于生成在不同运行环境下的机器代码。C#就提供了条件属性 (Conditional ...
Effective C#原则5:始终提供ToString()

Effective C#原则5:始终提供ToString()

Effective C#原则5:始终提供ToString()2010-12-09 博客园 Wu.Country@侠缘译在.Net世界里,用得最多的方法之一就是System.Object.ToStrying()了。你 应该为你所有的客户写一个“通情达理”的类(译注:这里是指这个 类应该对用户友好)。要么,你就迫使所用类的用户,去使用类的属性并添加一 些合理的易读的说明。这个以字符串形式存在,关于你设计的类的说明,可以很 容易的向你的用...
Effective C#原则6:区别值类型数据和引用类型数据

Effective C#原则6:区别值类型数据和引用类型数据

Effective C#原则6:区别值类型数据和引用类型数据2010-12-09 博客园 Wu.Country@侠缘译值类型数据还是引用类型数据?结构还是类?什么你须要使用它们呢?这不 是C++,你可以把所有类型都定义为值类型,并为它们做一个引用。这也不是 Java,所有的类型都是值类型。你在创建每个类型实例时,你必须决定它们以什 么样的形式存在。这是一个为了取得正确结果,必须在一开始就要面对的重要决 定。(一但做也决定)你就必须一直面对这个决定给你带来的...
Effective C#原则7: 选择恒定的原子值类型数据

Effective C#原则7: 选择恒定的原子值类型数据

Effective C#原则7: 选择恒定的原子值类型数据2010-12-09 博客园 Wu.Country@侠缘译恒定类型(immutable types)其实很简单,就是一但它们被创建,它们(的值) 就是固定的。如果你验证一些准备用于创建一个对象的参数,你知道它在验证状 态从前面的观点上看。你不能修改一个对象的内部状态使之成为无效的。在一个 对象被创建后,你必须自己小心翼翼的保护对象,否则你不得不做错误验证来禁 止改变任何状态。恒定类型天生就具有线程完...
Effective C#原则8:确保0对于值类型数据是有效的

Effective C#原则8:确保0对于值类型数据是有效的

Effective C#原则8:确保0对于值类型数据是有效的2010-12-09 博客园 Wu.Country@侠缘译.Net系统默认所有的对象初始化时都为0。这并没有提供一个方法来预防其他 程序员创建的值类型数据的实例在初始化是都是0。请让你的数据类型默认值也 是0。一个特殊情况是在枚举类型数据中。决不要创建一个不包括0在内 的枚举类型。所有的枚举类型都是从System.ValueType派生的。枚举类型的值是 从0开始的,但你可以改变这一行为:publ...
Effective C#原则9:明白几个相等运算之间的关系

Effective C#原则9:明白几个相等运算之间的关系

Effective C#原则9:明白几个相等运算之间的关系2010-12-09 博客园 Wu.Country@侠缘译明白ReferenceEquals(), static Equals(), instance Equals(), 和运算行 符==之间的关系。当你创建你自己的类型时(不管是类还是结构),你要 定义类型在什么情况下是相等的。C#提供了4个不同的方法来断定两个对象是否 是相等的:public static bool ReferenceEquals...
Effective C#原则10:明白GetHashCode()的缺陷

Effective C#原则10:明白GetHashCode()的缺陷

Effective C#原则10:明白GetHashCode()的缺陷2010-12-09 博客园 Wu.Country@侠缘译这是本书中唯一一个被一整个函数占用的原则,你应该避免写这样的函数。 GetHashCode()仅在一种情况下使用:那就是对象被用于基于散列的集合的关键 词,如经典的HashTable或者Dictionary容器。这很不错,由于在基类上实现的 GetHashCode()存在大量的问题。对于引用类型,它可以工作,但高效不高;对 于值类...
Effective C#原则11:选择foreach循环

Effective C#原则11:选择foreach循环

Effective C#原则11:选择foreach循环2010-12-09 博客园 Wu.Country@侠缘译C#的foreach语句是从do,while,或者for循环语句变化而来的,它相对要好 一些,它可以为你的任何集合产生最好的迭代代码。它的定义依懒于.Net框架里 的集合接口,并且编译器会为实际的集合生成最好的代码。当你在集合上做迭代 时,可用使用foreach来取代其它的循环结构。检查下面的三个循环:int [] foo = new int[...
Effective C#第二章:.Net资源管理

Effective C#第二章:.Net资源管理

Effective C#第二章:.Net资源管理2010-12-09 博客园 Wu.Country@侠缘译一个简单的事实:.Net应用程序是在一个托管的环境里运行的,这个环境和 不同的设计器有很大的冲突,这就才有了Effective C#。极大限度上的讨论这个 环境的好处,须要把你对本地化环境的想法改变为.Net CLR。也就意味着要明白 .Net的垃圾回收器。在你明白这一章里所推荐的内容时,有必要对.Net的内存管 理环境有个大概的了解。那我们就开始大概...
Effective C#原则12:选择变量初始化而不是赋值语句

Effective C#原则12:选择变量初始化而不是赋值语句

Effective C#原则12:选择变量初始化而不是赋值语句2010-12-09 博客园 Wu.Country@侠缘译(译注:根据我个人对文章的理解,我把initializer译为:初始化器,它是 指初始化语法,也就是在一个类里声明变量的同时,直接创建实例值的方法。例:object m_o = new object();如果这段代码不在任何函数内,但在 一个类里,它就是一个初始化器,而不管你是把它放在类的开始还以结尾。)一些类经常不只一个构造函数。时间一...
Effective C#原则13:用静态构造函数初始化类的静态成员

Effective C#原则13:用静态构造函数初始化类的静态成员

Effective C#原则13:用静态构造函数初始化类的静态成员2010-12-09 博客园 Wu.Country@侠缘译(译注:initializer在上文中译为了“初始化器”,实在不好听 ,本文中全部改译为:“预置方法”)你应该知道,在一个类 型的任何实例初始化以前,你应该初始化它的静态成员变量。在里C#你可以使用 静态的预置方法和静态构造函数来实现这个目的。一个类的静态构造函数是一个 与众不同的,它在...
Effective C#原则14:使用构造函数链

Effective C#原则14:使用构造函数链

Effective C#原则14:使用构造函数链2010-12-09 博客园 Wu.Country@侠缘译写构造函数是一个反复的工作。很多人员都是先写一个构造函数,然后 复制粘贴到其它的构造函数里,以此来满足类的一些重载接口。希望你不是这样 做的,如果是的,就此停止吧。有经验的C++程序可能会用一个辅助的私有方法 ,把常用的算法放在里面来构造对象。也请停止吧。当你发现多重构造函数包含 相同的逻辑时,取而代之的是把这些逻辑放在一个常用的构造函数里。你可以得 ...
Effective C#原则15:使用using和try/finally来做资源清理

Effective C#原则15:使用using和try/finally来做资源清理

Effective C#原则15:使用using和try/finally来做资源清理2010-12-09 博客园 Wu.Country@侠缘译使用非托管资源的类型必须实现IDisposable接口的Dispose()方法来精确的 释放系统资源。.Net环境的这一规则使得释放资源代码的职责是类型的使用者, 而不是类型或系统。因此,任何时候你在使用一个有Dispose()方法的类型时, 你就有责任来调用Dispose()方法来释放资源。最好的方法来保证Disp...
Effective C#原则16:垃圾最小化

Effective C#原则16:垃圾最小化

Effective C#原则16:垃圾最小化2010-12-09 博客园 Wu.Country@侠缘译垃圾回收器对内存管理表现的非常出色,并且它以非常高效的方法移除不再 使用的对象。但不管你怎样看它,申请和释放一个基于堆内存的对象总比申请和 释放一个不基于堆内存的对象要花上更多的处理器时间。你可以给出一些严重的 性能问题,例如应用程序在某个方法内分配过量的引用对象。你不应该 让垃圾回收器超负荷的工作,为了程序的效率,你可以使用一些简单的技巧来减 少垃圾回收...
Effective C#原则17:装箱和拆箱的最小化

Effective C#原则17:装箱和拆箱的最小化

Effective C#原则17:装箱和拆箱的最小化2010-12-09 博客园 Wu.Country@侠缘译值类型是数据的容器,它们不具备多太性。另一方面就是说,.Net框架被设 计成单一继承的引用类型,System.Object,在整个继承关系中做为根对象存在 。设计这两种类型的目的是截然不同的,.Net框架使用了装箱与拆箱来链接两种 不同类型的数据。装箱是把一个值类型数据放置在一个无类型的引用对象上,从 而使一个值类型在须要时可以当成引用类型来使用。...
Effective C#原则18:实现标准的处理(Dispose)模式

Effective C#原则18:实现标准的处理(Dispose)模式

Effective C#原则18:实现标准的处理(Dispose)模式2010-12-09 博客园 Wu.Country@侠缘译我们已经讨论过,处理一个占用了非托管资源对象是很重要的。现在是时候 来讨论如何写代码来管理这些类占用的非内存资源了。一个标准的模式就是利用 .Net框架提供的方法处理非内存资源。你的用户也希望你遵守这个标准的模式。也就是通过实现IDisposable接口来释放非托管的资源,当然是在用户记得调用 它的时候,但如果用户忘记了,析构函数...
Effective C#原则19:选择定义和实现接口而不是继承

Effective C#原则19:选择定义和实现接口而不是继承

Effective C#原则19:选择定义和实现接口而不是继承2010-12-09 博客园 Wu.Country@侠缘译抽象类在类的继承中提供了一个常规的“祖先”。一个接口描述 了一个可以被其它类型实现的原子级泛型功能。各有千秋,却也不尽相同。接口 是一种合约式设计:一个类型实现了某个接口的类型,就必须实现某些期望的方 法。抽象类则是为一个相关类的集合提供常规的抽象方法。这些都是老套的东西 了:它是这样的,继承就是说它是某物(is ...
<< 41 42 43 44 45 46 47 48 49 50 >>