Welcome 微信登录

首页 / 软件开发 / C#

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 ...
Effective C# 第三章,用C#表达你的设计

Effective C# 第三章,用C#表达你的设计

Effective C# 第三章,用C#表达你的设计2010-12-09 博客园 Wu.Country@侠缘译C#语言为你的设计介绍了一种新的语法,你可以选择这种技术让你的设计与 其它的开发人员进行交流,这些开发人员可以维护,扩展或者是使用你设计的软 件。C#的所有类型都是生存在.Net环境下的,这个环境对于所有类型的兼容性做 了一些好的假设。但如果你违反了这些假设,你就增加了类型不能正确工作的可 能性。这些原则不是那些已经出版了的软件设计技术的概要,相反...
Effective C#原则20:明辨接口实现和虚函数重载的区别

Effective C#原则20:明辨接口实现和虚函数重载的区别

Effective C#原则20:明辨接口实现和虚函数重载的区别2010-12-09 博客园 Wu.Country@侠缘译粗略的看一下,感觉实现接口和虚函数重载是一样的。你定义了一些对象, 但是这些对象是在另一个类型里申明的。你被第一感觉骗了,实现接口与虚函数 重载是完全不同的。在接口里定义的成员默认情况下,是根本不存在实际内容的 。派生类不能重载基类中的接口成员。接口可以隐式的实现,就是把它 们从类的公共接口中隐藏。它们的概念是不同的而且使用也是不同的。...
Effective C#原则22:用事件定义对外接口

Effective C#原则22:用事件定义对外接口

Effective C#原则22:用事件定义对外接口2010-12-11 博客园 Wu.Country@侠缘译可以用事件给你的类型定义一些外部接口。事件是基于委托的,因为委托可 以提供类型安全的函数签名到事件句柄上。加上大多数委托的例子都是使用事件 来说明的,以至于开发人员一开始都认为委托与事件是一回事。在原则21里,我 已经展示了一些不在事件上使用委托的例子。在你的类型与其它多个客户进行通 信时,为了完成它们的行为,你必须引发事件。一个简单的例子,你正 ...
Effective C#原则23:避免返回内部类对象的引用

Effective C#原则23:避免返回内部类对象的引用

Effective C#原则23:避免返回内部类对象的引用2010-12-11 博客园 Wu.Country@侠缘译你已经知道,所谓的只读属性就是指调用者无法修改这个属性。不幸运的是 ,这并不是一直有效的。如果你创建了一个属性,它返回一个引用类型,那么调 用者就可以访问这个对象的公共成员,也包括修改这些属性的状态。例如:public class MyBusinessObject{ // Read Only property providing access...
Effective C#原则24:选择申明式编程而不是命令式编程

Effective C#原则24:选择申明式编程而不是命令式编程

Effective C#原则24:选择申明式编程而不是命令式编程2010-12-11 博客园 Wu.Country@侠缘译与命令式编程相比,申明式编程可以用更简单,更清楚的方法来描述软件的 行为。申明式编程就是说用申明来定义程序的行为,而不是写一些指令。在C#里 ,也和其它大多数语言一样,你的大多数程序都是命令式的:在程序中写一个方 法来定义行为。在C#中,你在编程时使用特性就是申明式。你添加一个特性 到类,属性,数据成员,或者是方法上,然后.Net运行时...
Effective C#原则25 让你的类型支持序列化

Effective C#原则25 让你的类型支持序列化

Effective C#原则25 让你的类型支持序列化2010-12-11 博客园 Wu.Country@侠缘译对象的持久是类型的一个核心功能。这是一个在你忽略对它的支持以前,没 有人会注意到的基本元素之一。 如果你的类型不能恰当的支持序列化,那么对 于把你类的做为基类或者成员的开发人员来说,你会给他们增加很多的工作量。 当你的类型不支持序列化时,他们不得不围绕这工作,自己添加实现这个标准的 功能。而对于不能访问类的私有成员的开发人来说,恰当的实现你的类型...
Effective C#原则26:用IComparable和IComparer实现对象的顺序关系

Effective C#原则26:用IComparable和IComparer实现对象的顺序关系

Effective C#原则26:用IComparable和IComparer实现对象的顺序关系2010-12-11 博客园 Wu.Country@侠缘译你的类型应该有一个顺序关系,以便在集合中描述它们如何存储以及排 序。.Net框架为你提供了两个接口来描述对象的顺序关系:IComparable 和 IComparer。IComparable 为你的类定义了自然顺序,而实现IComparer接口的类 可以描述其它可选的顺序。你可以在实现接口时,定义并实现你...
Effective C#原则27:避免使用ICloneable

Effective C#原则27:避免使用ICloneable

Effective C#原则27:避免使用ICloneable2010-12-11 博客园 Wu.Country@侠缘译ICloneable看上去是个不错的主意:为一个类型实现ICloneable接口后就可 以支持拷贝了。如果你不想支持拷贝,就不要实现它。但你的对象并不 是在一个“真空”的环境中运行,但考虑到对派生类的些影响,最好 还是对ICloneable支持。一但某个类型支持ICloneable, 那么所有的派生类都必 须保持一...
Effective C#原则28:避免转换操作

Effective C#原则28:避免转换操作

Effective C#原则28:避免转换操作2010-12-11 博客园 Wu.Country@侠缘译转换操作是一种等代类型(Substitutability)间操作转换操作。等代类型就 是指一个类可以取代另一个类。这可能是件好事:一个派生类的对象可以被它基 类的一个对象取代,一个经典的例子就是形状继承。先有一个形状类,然后派生 出很多其它的类型:长方形,椭圆形,圆形以及其它。你可以在任何地方用图形 状来取代圆形,这就是多态的等代类型。这是正确的,因为圆...
Effective C#原则29:仅在对基类进行强制更新时才使用new修饰符

Effective C#原则29:仅在对基类进行强制更新时才使用new修饰符

Effective C#原则29:仅在对基类进行强制更新时才使用new修饰符2010-12-11 博客园 Wu.Country@侠缘译你可以用new修饰符来重新定义一个从基类中继承来的非虚成员。你可以这样 做,但并不意味着需要这样做。重新定义非虚方法会导致方法含意的混乱。如果 两个相关的类是继承关系,那么很多开发人员可能会立即假设两段代码块是做完 全相同的事情,而且他们也会这么认为:object c = MakeObject( );// Call thro...
Effective C#第4章:创建基于二进制的组件

Effective C#第4章:创建基于二进制的组件

Effective C#第4章:创建基于二进制的组件2010-12-11 博客园 Wu.Country@侠缘译随着类的数量增加,创建二进制的组件就变得很平常了:你想分离部分功能 。所有不同的是,二进制组件可以让你独立的保存这些离散的功能。创建的组件 程序集可以方便的共享逻辑,方便交叉语言 编程,以及方便布置。在.Net程序就是组件包,每一个程序什么样可以随时更新和发布。你应该已经知 道,基于程序集之间的应用程序是多么容易更新呀,程序集之间的偶合是多么好 呀...
Effective C#原则30:选择与CLS兼容的程序集

Effective C#原则30:选择与CLS兼容的程序集

Effective C#原则30:选择与CLS兼容的程序集2010-12-11 博客园 Wu.Country@侠缘译.Net运行环境是语言无关的:开发者可以用不同的.Net语言编写组件。而且在实际中往往就是这样的。你创建的程序集必须是与公共语言系统(CLS)是兼容的,这样才能保证其它的开发人员可以用其它的语言来使用你的组件。CLS的兼容至少在公共命名上要与互用性靠近。CLS规范是一个所有语言都必须支持的最小操作子集。创建一个CLS兼容的程序集,就是说你创建...
Effective C#原则31:选择小而简单的函数

Effective C#原则31:选择小而简单的函数

Effective C#原则31:选择小而简单的函数2010-12-11 博客园 Wu.Country@侠缘译做为一个有经验的程序员,不管你在使用C#以前是习惯用什么语言的,我们 综合了几个可以让你开发出有效代码的实际方法。有些时候,我们在先前的环境 中所做的努力在.Net环境中却成了相反的。特别是在你试图手动去优化一些代码 时尤其突出。你的这些行为往往会阻止JIT编译器进行最有效的优化。你的以性 能为由的额外工作,实际上产生了更慢的代码。你最好还是以你最...
Effective C#原则32:选择小而内聚的程序集

Effective C#原则32:选择小而内聚的程序集

Effective C#原则32:选择小而内聚的程序集2010-12-11 博客园 Wu.Country@侠缘译这一原则实际应该取这个名字:“应该创建大小合理而且包含少量公共 类型的程序集”。但这太沉长了,所以就以我认为最常见的错误来命名: 开发人员总是把所有的东西,除了厨房里水沟以外(译注:夸张说法,kitchen sink可能是个口语词,没能查到是什么意思,所以就直译了。),都放到一个程 序集。这不利于重用其中的组件,也不利于系...
Effective C#原则33:限制类型的访问

Effective C#原则33:限制类型的访问

Effective C#原则33:限制类型的访问2010-12-11 博客园 Wu.Country@侠缘译并不是所有的人都须要知道所有的事。也不是所有的类型须要是公共的。对于每个类型,在满足功能的情况下,应该尽可能的限制访问级别。而且这些访问级别往往比你想像的要少得多。在一个私有类型上,所有的用户都可以通过一个公共的接口来访问这个接口所定义的功能。让我们回到最根本的情况上来:强大的工具和懒惰的人员。VS.net对于他们来说是一个伟大的高产工具。我用VS.n...
<< 151 152 153 154 155 156 157 158 159 160 >>