c#学习心得(6)关于字段、方法、类的形象说法

*******写在前面**********
关于属性,这里没有提到,新手入门对于面向对象的理解还不能完全吃透,记录给自己看的,也希望帮到大家
*******来自知乎的答案***********
 
 
作者:匿名用户
链接:https://www.zhihu.com/question/30004315/answer/46395440
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

类可以被理解为一系列特殊的代码, 它是所有字段、方法(归根结底是一系列的代码数据)等等的总和,字段、方法等都是类的组成部分。

其实我建议题主反过来想这个问题——面向对象的英文原文是object oriented,直译就是从对象出发的/对象导向的。我们不应该从“字段+方法+属性+事件+...”的角度来理解什么是类,而应当从“这是一个类,其中包括了a字段、b方法、c属性、d事件......”来进行理解。

想象一下抽象的一只狗,它有各个生理器官,能够进行跑动、吠叫等行为。我们可以说,各个器官类似字段,各种行为类似于方法,这些字段与方法都是“狗”这个抽象的对象的组成部分。

当我们和一个具体的狗狗打交道时,我们是在和“抽象的狗”(对应为class,或者说类)的一个具体实例(instance)打交道,而这个实例的结构与类的结构相同。而当我们与狗狗发生具体的交互时(比如喂狗狗吃东西),我们不需要现场去指导狗狗如何吃东西、如何咀嚼、如何吞咽等等,我们只需要让它执行“吃”这个动作(即调用这个对象的某一方法),而“吃”背后的流程已经提前定好了(即在创建类的时候进行定义,可能是由你事先定义,也可能由其他人在别的地方定义,而由你进行引用)。

初学面向对象编程时,可能会无法理解为什么要搞得这么复杂——事实上,面向对象编程模式下,所有的字段、方法等等仍然要靠编程的人写出来,工作量未必会小。但在实际的程序开发过程中中,这样做是有好处的。考虑如下几个情景:
  1. 前面举的例子“喂狗狗吃东西”,从喂狗狗的人(即程序的调用方)来说,无需去关心具体怎么去处理“吃”这个动作,而只需要关注应当输入什么信息,能够得到什么反馈即可——这也就意味着,我们在调用方无需去考虑所调用方法的具体细节,这样整体代码的结构会更加清晰简洁。
  2. 如果我们要处理大量的狗狗,我们不需要反复定义狗狗A的各类属性、方法,狗狗B的属性、方法......,只需要实例化“狗”class,我们就能知道,所有的狗狗都具有所有事先定义好的内容;
  3. 如果我们需要进一步处理不同类别的狗狗,比如拉布拉多、金毛、哈士奇等等,我们不需要针对每一个类别去重新定义基本的内容(如生理器官,跑动、吠叫等基础行为),而只需要定义每个类别特殊的内容(比如毛长、毛色等等),并在此基础上共享“狗”的基础设定。这也就意味着,我们不需要进行大量重复劳动,也由此减少了产生错误的可能性。另外,一个类别的特殊内容并不会影响到其他类别,我们可以尽情调整某一具体类别的定义,而无须担心会误对其他类别产生影响。
原文地址:https://www.cnblogs.com/ttplearning/p/14077149.html