叩开C#之门系列之C#与面向对象编程语言
[[wiki]wiki[/wiki]][/wiki] C#是纯粹的面向[wiki]对象[/wiki][wiki]编程[/wiki]语言,它真正体现了“一切皆为对象”的精[wiki]神[/wiki]。在C#中,即使是最基本礫wiki]氖[/wiki]輀wiki]类[/wiki]型,如int,double,bool类型,都属于System.[wiki]object[/wiki]类型。此外,使用C#编程,不会存在与游离于对象之外的属于过程的东西。因此,学习C#,就必须具有[wiki]面向对象[/wiki][wiki]思想[/wiki],不明白所谓的“面向对象思想”,就不可能掌握C#的精髓,而对于C#的理解,就只能仅限于语言特色的表面了。 很多讲解面向对象思想的[wiki]书籍[/wiki]和文章喜欢将面向对象与面向过程相比较,然而对于学习[wiki]程序[/wiki]设计的初学者而言,是完全没有必要的。一张空白的纸誟wiki]牛[/wiki]率瞪媳刃绰值闹秸鸥谖蠢吹姆⒄埂! ∧敲词裁词恰懊嫦蚨韵笏枷搿保科渚比皇恰耙磺薪晕韵蟆钡囊庖濉wiki]软件[/wiki]的开发与设计,是围绕着开发的目标进行的。比如开发一个[wiki]电子[/wiki]商务[wiki]网站[/wiki],那么与[wiki]电子商务[/wiki]有关的都是我们要操作和关心的,商品、订单、用户、目录、购物车等等,都是对象。如果要开发一个论坛,那么论坛中必备的要素,如论坛分类、主题、帖子、评论、用户,也全都是对象。从小处说,我们要求写一个[wiki]算法[/wiki]用以计算阶乘,那么起始值、运算结果、以及整个算法都是对象。 那么对象具有什么特质?一般而言,一个对象应具有属性和行为。以现实世界为例,“人”作为一种特殊的动物,也是我们所称谓的“对象”。这个对象具有很多属性,例如姓名,身高、体重、民族、国籍、出生年月等等。而行为呢,可以是行走、吃饭、跑步、乃至于玩游戏、踢足球。如果从词义学的角度来看,属性更偏向于名词的范畴,而行为则近乎于动词。然而对象也有特殊的情况,或者只具有属性,或者只具有行为。例如身份证,可能只具有姓名,出生年月,籍贯,身份证号等属性,而没有行为。例如“飞”,这本身是一种[wiki]动作[/wiki],但同样可以认为是一种行为。 然而这种划分并非绝对,根据实际情况,同一种对象具有的属性和行为可能不一样。例如同样是“人”,如果是要开发一个户籍[wiki]管理[/wiki][wiki]系统[/wiki],我们就不必去考虑行走、吃饭、跑步等行为,但如果是一个足球游戏,那么对象“人”,就需要各种踢足球的动作作为该对象的行为了。再比如“身份证”对象,也可能为了使用方便,会为它添加“IsValidate”这样一个行为。 还要注意的是,很多时候属性其实本身也是一个对象,例如姓名,可以是string类型,它属于Sytem.Object对象类型,我们也可以单独为姓名建立一个类对象:public class Name{public string FirstName;public string MiddleName;public string LastName;} 在C#里,有各种各样的对象类型,除了本身提供的基本类型外,还支持自定义各种类型,包括class,struct,enum,interface,delegate,event。以前面的例子来看,对象Person“人”,就可以被定义为class类型,国籍可以被定义为enum类型。没有行为的身份证,也可以被定义为struct类型。动作“飞”可以被定义为interface类型。至于delegate和event,则是一种特殊对象类型,例如我们可以为论坛管理系统,定义一系列事件,如Before[wiki]POS[/wiki]t,AfterPost等等。关于这些内容,我会在后面的内容中详细讲解。 要掌握面向对象思想,就必须具备识别系统中对象的能力。在我们要开发的系统中,哪些需要定义为单独 的对象,而且这个对象应竅wiki]镁[/wiki]弑改男┦粜院托形际浅跹д弑冉贤诽鄣奈侍狻R返厥侗鸲韵螅托枰紫确治龈孟低乘κ迪值墓δ堋@纾颐且罂⒁桓龅缱由涛裣低常δ芤笕缦拢骸