面向过程POP:分析解决问题的步骤(调用函数)
优点:
流程化使得编程任务明确,在开发之前基本考虑了实现方式和最终结果,具体步骤清楚,便于节点分析。
效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。
缺点:
需要深入的思考,耗费精力,代码重用性低,扩展能力差,后期维护难度比较大。
面向对象OOP:引入封装、继承、多态、类,三个特性:封装、继承、多态,把问题分解成一个个对象(对象=属性+方法)
优点:
结构清晰,程序是模块化和结构化,更加符合人类的思维方式;
易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统;
易维护,系统低耦合的特点有利于减少程序的后期维护工作量。
缺点:
开销大,当要修改对象内部时,对象的属性不允许外部直接存取,所以要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。
性能低,由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,计算时间和空间存储大小都开销很大。
面向对象程序设计中代码间的相关性低(低耦合特性),使得代码很容易被复用和扩展,同时也说明了面向过程的代码重用性低、扩展能力差。
实例化就是创建对象的过程,使用new关键字
构造方法与类同名,在new的时候调用;是为了对类进行初始化,默认会生成空的构造方法,帮助用户实例化
构造方法和普通方法都可以重载。
方法重载提供了创建同名的多个方法的能力,但这些方法需要使用不同的参数类型
方法重载时,两个方法名要相同,但参数类型或个数必须要有所不同。
方法重载的好处:可以在不改变原方法的基础上增加功能。(提供了函数可扩展的能力)
函数重载作用:函数名可以相同,提高复用性。
函数重载满足条件:1:同一个作用域下,函数名称相同;2:函数参数类型不同或者个数不同或者顺序不同(注意:函数的返回值不可以作为函数重载的条件)
修饰符:只允许同一个类中的成员进行访问,其他类包括它的子类都无法访问。
protected:继承时子类可以对基类有完全访问权,对子类公开,对其他类不公开
属性是public,所以一般首字母大写;
字段是private,一般首字母小写或前面加 _
封装的好处:减少耦合、类内部的实现可以自由修改、类具有清晰地对外接口
子类继承父类所有的特性,还可以定义新的特性
如果子类继承于父类:子类拥有父类非private的属性和功能;子类还具有自己的属性和功能,可进行扩展;子类还可以以自己的方式实现父类的功能(方法重写)。
多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行
对象的声明是父类,实例化的对象是子类才能实现多态
子类以父类的身份出现,但子类特有的属性和方法不可以使用;子类在工作时以自己的方式实现(父类)。
方法重写:使用override关键字,子类将父类实现替换为它自己的实现
virtual:表示此方法是虚方法,可以被子类重写
抽象类:不能实例化,实例化是没有意义的;抽象方法是必须被子类重写的方法;如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法。目的:用来继承。(abstract 抽象类、抽象方法(无方法体))
接口(interface声明):一旦类实现了接口,类就可以支持接口所指定的所有属性和成员;命名:前面加I;一个类可以支持多个接口;不能实例化。
集合:
因为有了IList接口,所以ArrayList提供添加、插入、删除某一范围元素的方法。
命名空间:System.Collections
使用:using System.Collections;
集合的变化是影响全局的,始终保证元素的连续性。
比如删除0和1位置上的元素,则需要RemoveAt(0)两次
ArrayList不是类型安全的,需要类型匹配在Add的时候。使用集合元素需要执行拆箱操作,会有很大性能(资源、空间)损耗。
泛型:
泛型集合命名空间:using System.Collections.Generic;
声明泛型集合变量,用接口List
泛型集合List:避免了类型安全问题和拆箱装箱的性能问题。
委托与事件
委托对象用关键字delegate声明;