C#之面向对象三大要素
一、面向对象
1、什么是面向对象?
面向对象是一种思想,面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节,在面向对象中,将数据作为第一位,而方法或者说是算法作为其次,这是对数据的一种优化,操作起来更加方便,简化了过程。
2、为什么要用面向对象?
无论是在C#还是在VB中,都反复提及到了面向对象,那么为什么要使用面向对象呢?也就是说面向对象有哪些好处呢?
面向对象提高了程序的可复用性,可扩展性,和灵活性,通过封装,继承和多态把程序的耦合度降低,使程序更加的灵活,容易修改,并且易于复用。
二、封装
1、封装定义
每个对象都包含它能进行操作所需要的所有信息,这个特性就称为封装。
2、封装的好处
第一:良好的封装能够减少耦合(比如一个计算器他可以实现计算和显示结果的功能,将计算模块和显示模块分开写,就减少了程序之间的耦合)
第二:类内部的实现可以自由地修改
第三:类具有清晰的对外接口
三、继承
今天在进行迷你故事topic的时候,平平提到了一个问题:是水果包含的范围大呢?还是苹果包含的范围大呢?
这个问题让我们联想到了面向对象中的继承,水果提取了所有水果的共性,而苹果是在具备水果特性的基础上进一步扩展了自己的特性,如果这样理解的话,那是不是苹果所包含的范围大呢?
1、继承的定义
对象的继承代表了一种‘is a’的关系,如果俩个对象A和B,可以描述为‘B是A’,则表明B可以继承A。
例如:猫是哺乳动物,就说明了猫与哺乳动物之间的继承与被继承的关系。
继承者还可以理解为是对被继承者的特殊化,因为他除了具备被继承者的特性外,还具备自己特有的个性。
继承定义了类如何相互关联,共享特性。继承的工作方式是:定义父类和子类,或叫做基类和派生类,其中子类继承父类的所有特性。子类不但继承了父类的所有特性,还可以定义新的特性。
2、继承的好处
如果子类继承父类:
第一:子类拥有父类非private的属性和功能
第二:子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能
第三:子类还可以以自己的方式实现父类的功能(方法的重写)
不用继承的话,如果要修改功能,就必须在所有重复的方法中修改,代码越多,出错的可能就越大,而继承的优点是,继承使得所有子类公共的部分都放在了父类,使得代码得到了共享,这就避免了重复,另外,继承可以使得修改或继承而来的实现都比较容易。
3、继承的缺点
父类变,则子类不得不变。
继承会破坏包装,父类实现细节暴露给子类,这其实是增大了俩个类之间的强耦合关系。所以继承就是一种类与类之间强耦合的关系。
四、多态
1、多态的定义
多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。
2、使用多态需要注意一下几点
第一:子类以父类的身份出现
第二:子类在工作时以自己的方式来实现
第三:子类以父类的身份出现时,子类特有的属性和方法不可以使用
为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的,这是通过该成员的返回类型之前添加virtual关键字来实现。
将父类实现替换为他自己的实现,就是方法的重写(override),或叫方法赋写。
不同的对象可以执行相同的动作,但是要通过他们自己的实现代码来执行。
多态的原理是当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端的方法实现会被调用。
最后献上一张非常生动,形象的图!