第八章 面向对象编程简介
- 什么是面向对象编程
- OOP技术
- Windows Forms应用程序对OOP的依赖关系
8.1 面向对象编程的含义
OOP技术常常要使用许多代码模块,每个模块都能提供特定的功能,每个模块都是独立的,甚至与其它模块完全独立。
这种模块化方法提供了非常大的多样性,大大增加了重用代码的机会。
8.1.1 对象的含义
对象就是OOP应用程序的一个组成部件。
这部分程序可以是一个过程、一些数据或一些更抽象的实体。
使用统一建模语言(UML)语法研究类和对象。
UML是为应用程序建模而设计的,从组成应用程序的对象,到它们执行的操作等。
1. 属性和字段
可以通过属性和字段访问对象中包含的数据。
常见情况是把字段设置为私有,通过公共属性访问它们。
2. 方法
方法用于表示对象中的函数。
8.1.2 一切皆对象
8.1.3 对象的生命周期
每个对象都有一个明确定义的生命周期,除了“正在使用”的正常状态外,还有两个重要的阶段:
- 构造阶段:对象最初进行实例化的时期。
- 析构阶段:在删除一个对象时,常常要执行一些清理工作。
构造函数就是用于初始化数据的函数。
所有的类定义都至少包含一个构造函数。
在这些构造函数中可能有一个默认的构造函数,该函数没有参数,与类同名。
还可能包含几个带参数的构造函数,为非默认的构造函数。
在C#中,使用new关键字来调用构造函数。
8.1.4 静态和实例类成员
静态成员可以在类的实例间共享,所以可以将它们看作是类的全局对象。
静态属性和静态字段可以访问独立于任何对象实例的数据。
静态方法可以执行与对象类型相关、但与对象实例无关的命令。
1. 静态构造函数、
静态构造函数不能直接调用,只能在下述情况下执行:
- 创建包含静态构造函数的类实例时。
- 访问包含静态构造函数的类的静态成员时
8.2 OOP技术
对象的其它一些特性:
- 接口
- 继承
- 多态性
- 对象之间的关系
- 运算符重载
- 事件
- 引用类型和值类型
8.2.1 接口
接口是把公共实例(非静态)方法和属性结合起来,以封装特定功能的一个集合。
注:
接口不能单独存在。
接口不能包含实现其成员的任何代码,而只能定义成员本身。
实现过程必须在实现接口的类中完成。
可删除的对象
IDisposable接口。
支持IDisposable接口的对象必须实现其Dispose()方法,即它们必须提供这个方法的代码。
8.2.2 继承
C#中的对象仅能直接派生于一个基类。
可访问性:
派生类不能访问基类的私有成员,但可以访问其公共成员。
只有派生类才能访问protected成员。
外部代码不能访问protected和private成员。
8.2.3 多态性
8.2.4 对象之间的关系
- 包含关系
- 集合关系
8.2.5 运算重载符
8.2.6 事件
8.2.7 引用类型和值类型
8.3 Windows应用程序中的OOP
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
((Button)sender).Text = "Clicked!";
Button newButton = new Button();
newButton.Text = "New Button!";
newButton.Click += new EventHandler(newButton_Click);
Controls.Add(newButton);
}
private void newButton_Click(object sender, System.EventArgs e)
{
((Button)sender).Text = "Clicked!";
}
}
}