Welcome 微信登录

首页 / 软件开发 / C#

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...
Effective C#原则34:创建大容量的Web API

Effective C#原则34:创建大容量的Web API

Effective C#原则34:创建大容量的Web API2010-12-11 博客园 Wu.Country@侠缘译交互协议的开销与麻烦就是对数据媒体的如何使用。在交互过程中可能要不 同的使用媒体,例如在交流中要不同的使用电话号码,传真,地址,和电子邮件 地址。让我们再回头来看看上次的订购目录,当你用电话订购时,你要回答售货 员的一系列问题:“你可以把第一项填一下吗? ”“这一项的号码是123-456”&q...
Effective C#第五章:和Framework一起工作

Effective C#第五章:和Framework一起工作

Effective C#第五章:和Framework一起工作2010-12-11 博客园 Wu.Country@侠缘译我的同事,也是我的朋友Martin Shoemaker研究一个很严肃的问题,那就是 :“我必须写这样的.Net代码吗?” 答案是,也希望是:不。你应 该使用你手头上有的,也是你会用的工具来帮助你写代码。.Net框架是 一个很丰富的类库,你对框架学习的越多,你自己要写的代码就越少。框架库会 帮你完成很多工作。这一章就告...
Effective C#原则35:选择重写函数而不是使用事件句柄

Effective C#原则35:选择重写函数而不是使用事件句柄

Effective C#原则35:选择重写函数而不是使用事件句柄2010-12-11 博客园 Wu.Country@侠缘译很多.Net类提供了两种不同的方法来控制一些系统的事件。那就是,要么添 加一个事件句柄;要么重写基类的虚函数。为什么要提供两个方法来完成同样的 事情呢?其实很简单,那就是因为不同的情况下要调用为的方法。在派生类的内 部,你应该总是重写虚函数。而对于你的用户,则应该限制他们只使用句柄来响 应一些不相关的对象上的事件。例如你很了一个很不错的...
VC#2005快速入门之复合赋值操作符

VC#2005快速入门之复合赋值操作符

VC#2005快速入门之复合赋值操作符2010-12-13前面讲过如何使用算术操作符来创建新值。例如,以下语句使用操作符+来创建比变量answer大42的一个值,新值将写入控制台:Console.WriteLine(answer + 42);前面还讲过如何使用赋值语句来更改一个变量的值。以下语句使用赋值操作符将answer的值变成42:answer = 42;如果希望在一个变量的值上加42,可以将赋值操作符与加法操作符合并到一起。例如,以下语句在answe...
<< 41 42 43 44 45 46 47 48 49 50 >>