OO - 基础
- 类与对象:一切事物皆为对象,而类是对象的属性和方法的抽象
- 构造函数:为实例化对象提供初始化方法,不同的构造函数使对象具备不同的初始形态,如与对象本身具有整体的生命期关系,则在构造函数中实现初始化。
- 方法重载:对象某一行为根据不同参数,实现不一样的行为能力
- 属性:属性是对象特征描述,有不被外在影响的和可受内外影响的
- 修饰符:对象对外公布的程度:public/protected/private...
- 继承:实现复用,增加耦合,必须具有is-a的关系,否则以组合方式去实现
- 封装:隐藏对象具体的特征和行为
- 多态:对象一个行为根据不同对象的重写,实现不一样的行为能力
- 委托与事件:事件的发生是由于委托的存在,委托只控制了事件的参数、结果和通知,而事件发生的过程,则由事件订阅者去控制。
- 抽象:不可自己实现的类或行为,是对现有类的再抽象或是对类的超前设计,通常是从下向上的重构设计
- 接口:不可自己实现的抽象行为,通常不是类本身应有的行为,而是类可具备的行为,是从上向下的预设计.在设计时,也不应将不同概念的行为统一设计在一个接口上.
- 重构:是对现有代码的向上提炼,往抽象方向迈进
===========================================
多态实现例子:
在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
public class DrawingBase { public virtual void Draw() { Console.WriteLine("I'm just a generic drawing object.") ; } } public class Line : DrawingBase { public override void Draw() { Console.WriteLine("I'm a Line.") ; } } public class Circle : DrawingBase { public override void Draw() { Console.WriteLine("I'm a Circle.") ; } } public class Square : DrawingBase { public override void Draw() { Console.WriteLine("I'm a Square.") ; } } public class DrawDemo { public static void Main(string[] args) { DrawingBase [] dObj = new DrawingBase [4]; dObj[0] = new Line() ; dObj[1] = new Circle() ; dObj[2] = new Square() ; dObj[3] = new DrawingBase() ; foreach(DrawingBase drawObj in dObj) drawObj.Draw() ; } }
====================================================
抽象类和接口区别的例子:
abstract class Door {
//本身具备的行为 abstract void Open(); abstract void Close(); } interface IAlarm {
//非本身具备的行为 void Alarm(); } class AlarmDoor : Door, IAlarm { void Open() { } void Close() { } void Alarm() { } }