#57个

【转】编写高质量代码改善C#程序的157个建议——建议111:避免双向耦合

 建议111:避免双向耦合双向耦合是指两个类型之间相互引用。下面的代码是一种典型的双向耦合:classA{privateBb;publicvoidMethodA(){b.MethodB();}}classB{privateAa;publicvoidMethodB(){a.MethodA();}}双向耦合在同一...

【转】编写高质量代码改善C#程序的157个建议——建议110:用类来代替enum

 建议110:用类来代替enum枚举(enum)用来表示一组固定的值。例如,为了表示星期信息,我们可以定义枚举Week:enumWeek{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday}枚举最大的优点在于它的类型是值类型。相比较引用类型来说,它...

【转】编写高质量代码改善C#程序的157个建议——建议109:谨慎使用嵌套类

 建议109:谨慎使用嵌套类使用嵌套类的原则是:当某类型需要访问另一个类型的私有成员时,才将它实现为嵌套类。一个典型的例子是在实现集合时,要为集合实现迭代器,这时用到了嵌套类。代码如下所示:publicclassArrayList:IList,ICollection,IEnumerable,ICloneabl...

【转】编写高质量代码改善C#程序的157个建议——建议108:将类型标识为sealed

 建议108:将类型标识为sealedsealed能够阻止类型被其他类型继承。代码如下:sealedclassSampleClass{}classOtherClass:SampleClass{}这段代码提示:“无法从密封类型SampleClass派生。”将类型修饰为sealed能够有效...

【转】编写高质量代码改善C#程序的157个建议——建议107:区分静态类和单例

 建议107:区分静态类和单例有一种观点认为:静态类可以作为单件模式的一种实现方式。事实上,这是不妥当的。按照传统的观点来看,单例是一个实例对象。而静态类并不满足这一点。静态类也直接违反面向对象三大特性的两项:继承和多态。无法让一个静态类从其它类型继承的实例如下:interfaceISample{}stati...

【转】编写高质量代码改善C#程序的157个建议——建议106:为静态类添加静态构造函数

 建议106:为静态类添加静态构造函数静态类可以拥有构造方法,这就是静态构造方法。静态构造方法与实例构造方法比较有几个自己的特点:只被执行一次,且在第一次调用类成员之前被运行时执行。代码无法调用它,不像实例构造方法使用new关键字就可以被执行。没有访问标识符。不能带任何参数。 使用静态构造方法的好处...

【转】编写高质量代码改善C#程序的157个建议——建议104:用多态代替条件语句

 建议104:用多态代替条件语句假设要开发一个自动驾驶系统。在设计之初,此自动驾驶系统拥有一个驾驶系统命令的枚举类型:enumDriveCommand{Start,Stop}当前该枚举存在两个命令:开始、停止。又假设有一个驾驶方法可以处理车辆接收到的指令。一开始我们可能像下面这样编码:staticvoidMa...

【转】编写高质量代码改善C#程序的157个建议——建议103:区分组合和继承的应用场合

 建议103:区分组合和继承的应用场合 继承所带来的多态性虽然是面向对象的一个重要特性,但这种特性不能在所有的场合中滥用。继承应该被当做设计架构的有用补充,而不是全部。组合不能用于多态,但组合使用的频率却要远远高于继承。继承UML图如下:对应的代码如下:abstractclassStream{//省...

【转】编写高质量代码改善C#程序的157个建议——建议102:区分接口和抽象类的应用场合

 建议102:区分接口和抽象类的应用场合 接口和抽象类有一些显而易见的区别:接口支持多继承,抽象类则不能。接口可以包含方法、属性、索引器、事件的签名,但不能有实现,抽象类则可以。接口在增加新方法后,所有的继承者都必须重构,否则编译不通过,而抽象类则不需要。这些区别导致两者的应用场景不同:如果对象存在...

【转】编写高质量代码改善C#程序的157个建议——建议101:使用扩展方法,向现有类型“添加”方法

 建议101:使用扩展方法,向现有类型“添加”方法考虑如何让一个sealed类型具备新的行为。以往我们会创建一个包装器类,然后为其添加方法,而这看上去一点儿也不优雅。我们也许会考虑修改设计,直接修改sealed类型,然后为其发布一个新的版本,但这依赖于你拥有全部的源码。更多的时候,我们...

【转】编写高质量代码改善C#程序的157个建议——建议100:静态方法和实例方法没有区别

 建议100:静态方法和实例方法没有区别静态方法在加载时机和内存使用上和实例方法完全一致。在这里,我们先引出一个概念“类型对象”。比如类型Person,我们都知道newPerson()会产生一个对象,这个对象叫做“实例对象”,它在运行时会加载到GCHeap上。而...

【转】编写高质量代码改善C#程序的157个建议——建议99:重写时不应使用子类参数

 建议99:重写时不应使用子类参数重写时,如果使用了子类参数,可能会偏离设计者的预期目标。比如,存在一个如下继承体系:classEmployee{}classManager:Employee{}现在,类型ManagerSalary中的SetSalary方法重写了Salary中的相同方法,重写的方法采用一个子类...

【转】编写高质量代码改善C#程序的157个建议——建议98:用params减少重复参数

 建议98:用params减少重复参数如果方法的参数数目不定,且参数类型一致,则可以使用params关键字减少重复参数声明。voidMethod1(stringstr,objecta){}voidMethod2(stringstr,objecta,objectb){}voidMethod3(stringstr...

【转】编写高质量代码改善C#程序的157个建议——建议97:优先考虑将基类型或接口作为参数传递

 建议97:优先考虑将基类型或接口作为参数传递除了公开及类型或接口外,方法的参数也应该考虑基类型或接口。以Enumerable类型为例,它的成员方法中只要涉及需要操作集合对象的地方,都要使用IEnumerable泛型接口,比如:publicstaticIEnumerable<TSource>Tak...

【转】编写高质量代码改善C#程序的157个建议——建议96:成员应优先考虑公开基类型或接口

 建议96:成员应优先考虑公开基类型或接口类型成员如果优先考虑公开及类型或接口,那么会让类型支持更多的应用场合。FCL中最典型的例子是集合的功能操作。集合根据功能划分有多种类型,比如List<T>、Dictionary<TKey,TValue>、HashSet<T>等。以一...
首页上一页...7891011下一页尾页