要点:
1、面向对象概述
2、类的概念
3、类的声明
4、构造函数和析构函数
5、对象的声明和实例化
6、类与对象的关系
7、类的封装
8、类的继承
8、类的多态
一 面向对象概述
在面向对象中,算法与数据结构被看做一个整体,称为对象。现实世界中任何类的对象都具有一定的属性和操作,也总能用数据结构与算法两者合二为一来描述,所以可以用下面的等式来定义对象和程序。
对象=(算法+数据结构),程序=(对象+对象+……)。
class 水果类
{
public 颜色; //在水果类中定义颜色属性
}
class 苹果类:水果类
{
//苹果类中其他的属性和方法
}
1 类的概念
类是对象概念在面向对象编程语言中的反映,是相同对象的集合。类描述了一系列在概念上有相同含义的对象,并为这些对象统一定义了编程语言上的属性和方法。
2 类的声明
C#中,类是使用class关键字来声明的,语法如下。
类修饰符 class 类名
{
}
例如:
public class Car
{
public int number; //编号
public string color; //颜色
private string brand; //厂家
}
二 构造函数和析构函数
构造函数和析构函数是类中比较特殊的两种成员函数,主要用来对对象进行初始化和回收对象资源。一般来说,对象的生命周期从构造函数开始,以析构函数结束。如果一个类含有构造函数,在实例化该类的对象时就会调用,如果含有析构函数,则会在销毁对象时调用。构造函数的名字和类名相同,析构函数和构造函数的名字相同,但析构函数要在名字前加一个波浪号(~)。当退出含有该对象的成员时,析构函数将自动释放这个对象所占用的内存空间。
(1)构造函数:构造函数是在创建给定类型的对象时执行的类方法。构造函数具有与类相同的名称,它通常初始化新对象的数据成员。
(2)析构函数:析构函数是以类名加~来命名的。.NET Framework类库有垃圾回收功能,当某个类的实例被认为是不再有效,并符合析构条件时,.NET Framework类库的垃圾回收功能就会调用该类的析构函数实现垃圾回收。
三 对象的声明和实例化
对象是具有数据、行为和标识的编程结构,它是面向对象应用程序的一个组成部分,这个组成部分封装了部分应用程序,这部分程序可以是一个过程、一些数据或一些更抽象的实体。
对象包含变量成员和方法类型,它所包含的变量组成了存储在对象中的数据,而其包含的方法可以访问对象的变量。略为复杂的对象可能不包含任何数据,而只包含方法,并使用方法表示一个过程。
C#中的对象是把类实例化,这表示创建类的一个实例,“类的实例”和对象表示相同的含义,但需要注意的是,“类”和“对象”是完全不同的概念。
四 类与对象的关系
类是一种抽象的数据类型,但是其抽象的程度可能不同,而对象就是一个类的实例。类是具有相同或相似结构、操作和约束规则的对象组成的集合,而对象是某一类的具体化实例,每一个类都是具有某些共同特征的对象的抽象。
五 类的封装
在面向对象编程中,大多数都是以类作为数据封装的基本单位。类将数据和操作数据的方法结合成一个单位。设计类时,不希望直接存取类中的数据,而是希望通过方法来存取数据,这样就可以达到封装数据的目的,方便以后的维护升级,也可以在操作数据时多一层判断。
此外,封装还可以解决数据存取的权限问题,可以使用封装将数据隐藏起来,形成一个封闭的空间,然后可以设置哪些数据只能在这个空间中使用,哪些数据可以在空间外部使用。一个类中包含敏感数据,有些人可以访问,有些人不能访问,如果不对这些数据的访问加以限制,后果将会非常严重。所以在编写程序时,要对类的成员使用不同的访问修饰符,从而定义它们的访问级别。
六 类的继承
继承是面向对象编程最重要的特性之一。任何类都可以从另外一个类继承,这就是说,这个类拥有它继承的类的所有成员。在面向对象编程中,被继承的类称为父类或基类。C#中提供了类的继承机制,但只支持单继承,而不支持多重继承,即在C#中一次只允许继承一个类,不能同时继承多个类。
利用类的继承机制,用户可以通过增加、修改或替换类中的方法对这个类进行扩充,以适应不同的应用要求。利用继承,程序开发人员可以在已有类的基础上构造新类,这一性质使类支持分类的概念。在日常生活中很多东西都很有条理,那是因为它们有着很好的层次分类。如果不用层次分类,则需要对每个对象都定义其所有的性质。使用继承后,每个对象就可以只定义自己的特殊性质,每一层的对象只需定义本身的性质,其他性质可以从上一层继承下来。
七 类的多态
多态使子类(派生类)的实例可以直接赋予基类的变量(这里不需要进行强制类型转换),然后直接就可以通过这个变量调用子类(派生类)的方法。
在派生于同一个类的不同对象上执行任务时,多态是一种极为有效的技巧,使用的代码最少。可以把一组对象放到一个数组中然后调用它们的方法,在这种情况下多态的作用就体现出来了,这些对象不必是相同类型的对象。当然如果它们都继承自某个类,可以把这些子类(派生类)都放到一个数组中。如果这些对象都有同名方法,就可以调用每个对象的同名方法。
C#中,类的多态性是通过在子类(派生类)中重载基类的虚方法或函数成员来实现的。