面向过程:
首先,需要分析出解决问题所需要的步骤
然后,用函数把这些步骤一步一步的实现
使用的时候一个一个一次调用(逐行执行代码)
面向对象:
把构成问题事务分解成各个对象,建立对象的目的为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。
对象是指实体的实例,该实体包含了特定的属性数据和对这些数据进行操作的函数。
对于类,我们可以把它看作是一组具有相同数据结构和相同操作的对象的集合。每个对象都是该类的一个实例。
面向对象包含了三大特性:继承、封装、多态。
字段:和某个对象相关的变量。
字段和属性的区别:
字段主要是在类的内部使用,存储数据
属性是类提供给外部调用时用的,对象的属性可以用来设置或者读取一个字段的值。属性可以通过get set访问器对字段提供安全、有效范围等保护作用。属性相对与字段来说,具有更大的灵活性和可扩展性。
为了更加符合面向的编程思想,我们在项目中,通常使用自定义的属性来访问字段。属性本身是不存储数据的(属性当中的set{}为空的情况下,即使对该属性执行任意操作,都不会改变该属性的返回值。),数据都保存在字段当中。
对于代码的重用归结为两类:一是继承(“is-a”的关系)二是包含委托模型(“has-a”的关系)
一、继承 简单来说就是一个对象可以使用另一个对象的属性和方法。
public Class BWM :Car
{
}
上述实例:类BWM继承自类Car,Car是BWM的基类(或者称为父类),BWM是Car的派生类(或者称为子类)C#当中在两个类之间使用“:”修饰符来创建继承的关系。
BWM对象通过继承关系,BWM的对象可以访问Car类当中的每一个公共成员。(私有成员只能被定义它的类访问)
我们需要注意的是:派生类从未继承父类的构造函数。
C#当中只允许一个类拥有一个直接的基类。Object类是所有的类的基类。
如果一个类使用了sealed关键字,则该类不能被继承。
我们创建一个子类的对象,程序执行前会自动的调用子类当中的构造函数,但是调用该构造函数之前会先调用父类当中的构造函数,默认调用父类当中的默认构造函数,为了优化派生类的创建,可以减少继承的初始化成员的调用次数。我们可以使用base关键字来指定调用的父类中的构造函数
二、封装
封装,实现数据的保护,方便使用(使用者不必去关心使用部分内部的结构,只要达到自己的效果就可以了),在比较理想的状态下,对象的状态数据应使用private或者procted关键字来指定访问范围,依次来阻止外部的直接访问或改变操作。
封装的核心:对象内部的数据不应该直接从对象的实例进行访问,而是需要通过使用访问方法也就是我们通常说的set/get(存取器)
三、多态
主要是依赖与抽象而不不依赖具体,增加灵活性,常见的多态体现在接口和抽象类