一.面向对象编程的含义
1.对象的含义
对象(类的实例) | 变量 |
类 | 变量类型 |
类的实例化 | 声明变量 |
指定字段的初始值 | 变量赋值 |
1).属性和字段
字段:存储对象的状态,可以直接访问
属性:存储对象的状态,但不提供对数据的直接访问
1>.属性具有读写访问权限和可访问性两种权限控制
2).方法:对象中的函数
2.一切皆对象
3.对象的生命周期
对象的生命周期分为三个阶段:
构造阶段:对象最初进行实例化的时期,由构造函数完成
正在使用:
析构阶段:删除对象时,需要执行一些清理工作。由析构函数完成
1).构造函数
对象的初始化过程是自动完成的,但有时需要执行一些额外工作。如给对象中的数据提供初始值。构造函数即用于此
1>.所有类的定义至少包含一个构造函数
2>.默认构造函数:没有参数的构造函数,且与类同名;带参数的叫非默认构造函数
3>.C#中用new关键字调用构造函数
2).析构函数
.Net Framework默认情况下无需提供析构函数的代码,由默认的析构函数自动执行操作。但删除对象实例前
4.静态和实例类成员
二.OOP技术
1.接口
1).接口是把公共实例方法和属性组合起来,以封装特定功能的一个集合
2).接口不能单独存在,必须被类实现
3).接口不能实例化
4).接口不能包含实现其成员的任何代码,只能定义成员本身。实现过程必须在实现接口的类中完成
5).接口:类 == m:n
6).IDisposable接口的用法
2.继承(派生)
1).C#中的对象仅能直接派生于一个基类,即类只能有一个父类。但父类又可以是另外一个类的子类
2).父类:子类 == 1:n
3).可访问性:子类可以访问父类的public和protected成员,不能访问provite成员;外不类只能访问public类成员
4).基类的成员可以是虚拟的,子类提供其虚拟成员的实现代码(重写)
5).基类可以是抽象类。抽象类不能直接实例化,必须被继承才能使用
3.多态性
子类和父 类在属性和方法上有一定的重叠,可以用相同的语法处理从同一个基类实例化的对象。具体方法如:父类Animal有一个Eatfood()方法,则子类Cow和Chickin调用Eatfood()方法的方式都一一样的,即:子类实例(变量).Eatfod();
1).可以把子类类型的变量赋值给基类的变量,父类可以用这个变量调用子类的方法。反之则不可
如:Animal myAnimal=myCow;
myAnimal.Eatfood()
3).可以把基类变量强制转换为子类类型,即可实现父类变量调用子类方法
如:CowmyNewCow=(Cow)myAnimal;
myNewCow.Moo();
4).接口的多态性:
建立接口类型的变量,用支持这个接口的多个对象上,直接使用这个变量访问接口提供的方法和属性。如定义一个接口IConsume,将Cow,Chicken和Vegtable的变量赋值给IConsume接口的变量consumeInterface,然后用consumeInterface调用定义在IConsume中的Eatfood()方法。不过这三个类需要提供Eatfood的实现代码。