一、面向对象的概念
1.基本概念
类可以派生形成子类(派生类),派生子类的类称为父类。对应一个系统最基本的类称为基类,一个基类可以有多个派生类,从基类派生出的类(子类)还可以进行派生。
对象是类的具体化,是具有属性和方法的实体(实例)。对象通过唯一的标识名以区别于其他对象,对象有固定的对外接口,它是对象与外界通信的通道。
2.对象、类与实例化
对象是类的具体化,是具有属性和方法的实体(实例)。对象通过唯一的标识名以区别于其他对象,对象有固定的对外接口,它是对象与外界通信的通道。
二、面向对象程序设计三原则
1.封装
封装的对象之间进行通信的一种机制叫作消息传递。消息是向对象发出的服务请求,是对象之间交互的途径。消息包含要求接收对象去执行某些活动的信息,以及完成要求所需的其他信息(参数)。发送消息的对象不需要知道接收消息的对象如何对请求予以响应,接收者接收到消息,它就承担了执行指定动作的责任,作为消息的答复,接收者将执行某个方法来满足所接收的请求。
2.继承
继承性主要利用特定对象之间的共有属性。例如,平行四边形是四边形(矩形也是四边形),平行四边形与四边形具有共同特性,就是拥有4条边。我们可以将平行四边形类看作四边形的延伸。平行四边形复用了四边形的属性和行为,同时添加了平行四边形独有的属性和行为,如平行四边形的对边平行且相等。这里可以将平行四边形类看作是从四边形类中继承的。在C#中,将类似于平行四边形的类称为子类,将类似于四边形的类称为父类。如下图3-5
3.多态
多态分两种:静态多态和动态多态。当在同一个类中直接调用一个对象的方法的时候,系统在编译时,根据传递的参数个数、类型及返回值类型等信息决定实现何种操作,这就是所谓的静态多态(静态绑定)。而当在一个有着继承关系的类层次结构中间接调用一个对象的方法的时候,调用要经过基类的操作,只有到系统运行时,才能根据实际情况决定实现何种操作,这就是动态多态(动态绑定)。C#同时支持这两种多态,在实现方式上可以有三种方式:接口多态、继承多态、通过抽象类实现的多态。
三、类
1.类的概念
类是一种数据结构,它可以包含数据结构(常量和域)、函数成员(方法、属性、事件、索引器、运算器、构造函数和析构函数)和嵌套类型。
2.类的声明
C#中类是使用class关键字来声明的,语法如下:
类修饰符 class 类名
{
}
常用的几个类修饰符,如下:
new:仅允许在嵌套类声明时使用,表明类中隐藏了由类中继承而来。
public:不限制对该类的访问。
protected:只能从所在类和所在类的子类进行访问。
internal:只能所在类才能访问。
private:只能访问此类。
abstract:抽象类,不允许建立类的实例。
四、对象的创建及使用
1.对象的创建
在C#中,创建对象通过new操作符来创建。代码如下:
Test test = new Test();
Test是类名
test是自定义的对象
2.对象的销毁
每个对象都有生命周期,当对象的生命周期结束时,分配给对象的内存地址会被回收。
五、多态的实现
1.方法重载
一个方法的名字、形参个数、修饰符及类型共同构成了这个方法的签名,应用中经常需要为同名的方法提供不同的实现,如果一个类中有两个或两个以上的方法同名,但它们的形参个数或类型有所不同,这是允许的,这属于不同的方法签名。若仅仅是返回类型不同的同名方法,编译器是不能识别的。下面通过一个例子来介绍方法的重载。
using System;
namespace Ex3_7
{
class Myclass // 该类中有4个不同版本的max方法
{
public int max(int x, int y)
{
return x >= y ? x : y;
}
public double max(double x, double y)
{
return x >= y ? x : y;
}
public int max(int x, int y, int z)
{
return max(max(x, y), z);
}
public double max(double x, double y, double z)
{
return max(max(x, y), z);
}
}
class Test
{
static void Main(string[] args)
{
Myclass m = new Myclass();
int a, b, c;
double e, f, g;
a = 10; b = 20; c = 30;
e = 1.5; f = 3.5; g = 5.5;
// 调用方法时,编译器会根据实参的类型和个数调用不同的方法
Console.WriteLine("max({0},{1})= {2} ", a, b, m.max(a, b));
Console.WriteLine("max({0},{1},{2})= {3} ", a, b, c, m.max(a, b, c));
Console.WriteLine("max({0},{1})= {2} ", e, f, m.max(e, f));
Console.WriteLine("max({0},{1},{2})= {3} ", e, f, g, m.max(e, f, g));
Console.Read();
}
}
}