《C#入门经典》学习笔记(面向对象编程)

来源:互联网 发布:淘宝客佣金查看工具 编辑:程序博客网 时间:2024/04/29 19:16

面向对象编程

 

面向对象编程

面向对象编程(OOP)方法提供非常大的多样性,大大增加代码的重用机会


对象

对象就是OOP应用程序的一个组成部件

1 属性和字段

属性和字段可以访问对象中包含的数据
包含在对象中的不同数据统称为对象的状态
字段和属性都可以输入,存储信息
属性不能直接访问数据,但能更好地控制整个过程
例如设置只读的属性,或内容限制等
可以设置属性和字段的可访问性,包括公共,私有等

2 方法

方法用于表示对象中的函数
方法用于访问对象的功能,也可设置可访问性


一切都是对象

C#和.NET Framework中所有东西都是对象


对象的生命周期

在对象的生命周期中,除了“正在使用”的状态外,还有:
构造阶段:对象最初进行实例化的时期,由构造函数完成
析构阶段:删除一个对象时,执行的一些清理工作,由析构函数完成

1 构造函数

对象的初始化过程是自动完成的,构造函数就是用于初始化数据的函数
所有对象都有一个默认的构造函数,该函数没有参数,与类本身有相同的名称
一个类可以包含多个构造函数,用于实例化对象
构造函数也可以设置公共或私有

在C#中构造函数用new关键字来调用
例如:
string myString = new string();
带参数的构造函数:
string myString = new string('a', 5);

2 析构函数

析构函数用于清理对象,一般情况下,不需要提供,而由默认析构函数执行清理
除了在删除对象前,需要完成一些重要操作

 

静态和实例类成员

静态成员可以在类的实例之间共享,可看作是类的全局对象
包括静态方法、静态属性、静态字段
在使用静态成员时,甚至不需要实例化类型的对象

 

OOP技术


接口

接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合
一个类可以支持多个接口,多个类可以支持相同的接口
支持IDisposable接口的对象必须提供和执行Dispose()方法
当不再需要某个对象时,就调用来释放资源
c#提供一种优化的方法:
using(<ClassName> <VariableName> = new <ClassName>())
{
 ...
}
Dispose()方法会在代码块末尾自动调用


继承

任何类都可以从另一个类继承,这个类就拥有它继承的类的所有成员
在OOP中,被继承(派生)的类称为父类(基类),C#中的对象仅能派生于一个基类
可访问性:公共成员,私有成员,保护成员

基类的成员可以是虚拟的,即成员可以由继承它的类重写
注意虚拟成员不能是私有成员

基类可以定义为抽象类
抽象类不能直接实例化,必须先继承这个类才能使用
抽象类可以有抽象成员,抽象成员没有代码,执行代码必须由派生类提供

类可以是密封的,密封的类不能被继承
在C#中,所有的对象都有一个共同的基类object

注意:接口,跟类不同,可以派生于多个接口


多态性

多态性可以把某个基本类型的变量赋予其派生类型的变量
只要子类和孙子类在继承层次结构中有一个相同的类就可以使用多态性
例如:
类ClassA有方法aa()
类ClassA的派生类ClassB有方法aa()和bb()

ClassA oA = new ClassB();
那么oA.aa()执行的将是类ClassB的aa()
注意:不能以相同的方式调用派生类上定义的方法,如oA.bb()将不能运行
不过可以把基本类型的变量转换为派生类变量,再调用派生类的方法
例如:
ClassB oB = (ClassB)oA;
这时就可以调用oB.bb()

接口的多态性


对象之间的关系

除了继承之外,对象之间还可以有其他关系:
包含关系:一个类包含另一个类
集合关系:一个类用作另一个类的多个实例的容器

包含关系
用一个成员字段包含对象实例,就实现了包含关系。这个成员字段必须是公共字段
类似继承,容器对象可以访问它的方法和属性
可以设置成员字段为私有成员,用户就不能直接访问包含对象的成员

集合关系
类似数组,对象可以储存相同类型的多个实例
例如:ClassA[] oA = new ClassA[5];


运算符重载


事件

对象可以激活时间,作为他们处理的一部分
使用事件可以创建事件驱动的应用程序


引用类型和值类型

变量的类型分两种:
值类型:在内存的一个地方(称为堆栈)存储它们自己和它们的内容
引用类型:在内存的一个地方(称为堆)存储一个引用,而在另一个地方存储内容

结构
结构类型和类的关键区别:结构类型是值类型

 

Windows应用程序中的OOP 

原创粉丝点击