面向对象三大要素
1、继承 :多组合、少继承;低耦合、高内聚;
2、封装 :对内实现数据私有,对外实现方法调用,保证数据的完整性和安全性;
3、多态 :一个接口,多种方法。
面向对象七大原则:
1、单一职责原则:一个类应该仅有一个引起它变化的原因。
2、开发封闭原则:对修改封闭,对扩展开发。
3、依赖倒置原则:依赖于抽象,不依赖于具体,因为抽象的稳定的。
4、接口隔离原则:尽量应用专门的接口,而不是单一的总接口,接口面向用户,将依赖建立在最小的接口上
5、Liskov替换原则:子类必须能够替换其基类;
6、合成/聚合复用原则:新对象中聚合已有对象,使之成为新对象的成员,少继承、多聚合;
7、迪米特法则:最少知识原则,软件实体应尽可能最好和其他软件实体发生相互作用。
接口的规则
1、接口隔离原则;
2、接口支持多继承,既可作用于值类型,也可作用于应用类型;
3、禁止为已经发布的接口添加新成员,这意味着必须修改所有实现了该接口的类型;
4、接口不能被实例化,没有构造函数,接口成员被隐失声明为Public;
5、接口可以作用为值类型和引用类型,并且支持多继承。
拆箱和装箱
就是值类型和引用类型的转换。
装箱就是值类型数据转换为无类型的应用对象,这种转换主要指转换为System.Object类型或者该值类型实现的任何接口类型;
拆箱就是引用类型转换为值类型,通常伴随从堆中复制对象实例的操作。
值类型和引用类型
值类型:Value Type,值类型实例通常分配在线程的堆栈上(strack),并不包含任何指向实例数据的指针,因为变量本身包含了实例数据。
简单类型、枚举类型、结构类型。
引用类型:Reference Type,引用类型实例分配在托管堆上(Managed heap),变量保存了实例数据的内存应用。
类、接口、数组、委托
构造函数和析构函数
构造函数不具有任何类型(不是void),不返回任何值,与类同名。构造函数用于对象的初始化。可以带参数。
析构函数作用与构造函数相反,名字是类名前加~
构造函数可以重载,析构不可以。
它们调用的顺序是先构造的后析构,后构造的先析构。
委托
delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。
委托是事件的基础。
接口
接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值;
接口方法不能包含任何实现,CLR允许接口可以包含事件、属性、索引器、静态方法、静态字段、静态构造函数和常数;但C#中不能包含任何静态成员
一个类可以实现多个接口,当一个类实现某个接口时,不仅要实现接口定义的所有接口方法,还要实现该接口从其他接口继承的所有方法。
抽象类Abstract
提供多个派生类共享基类的公共定义,既可提供抽象方法,也可以提供非抽象方法;
不能实例化,必须通过继承由派生类实现抽象方法。
实现抽象方法用Override完成
abstract声明抽象类、抽象方法
1.抽象方法所在类必须为抽象类
2.抽象类不能直接实例化,必须由其派生类实现。
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,
虚方法
使用virtul定义该方法为虚拟方法。
virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。例如,此方法可被任何继承它的类重写。
virtual标记方法为虚方法
1.可在派生类中以override覆盖此方法
2.不覆盖也可由对象调用
3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法
abstract与virtual: 方法重写时都使用 override 关键字
interface中的方法和abstract方法都要求实现
虚方法声明使用virtual关键字;调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法;虚方法可以有实现体。
抽象方法声明使用abstract,是必须被派生类覆写的方法,抽象类就是用来被继承的;可以看成是没有实现体的虚方法;如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法;抽象类不能有实体的。
WebService
WebService的主要目标是跨平台的可互操作性。为了达到这一目标,WebService完全基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。由此可以看出,在以下三种情况下,使用WebService会带来极大的好处。
长项一:跨防火墙的通信
长项二:应用程序集成
长项三:B2B的集成
长项四:软件和数据重用
也有一些情况,WebService根本不能带来任何好处。
短处一:单机应用程序
短处二:局域网的同构应用程序
框架
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。因此构件库的大规模重用也需要框架。