面向对象的基本概念
类
类(Class)实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。
类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。
可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。从这个蓝图可以创建任何数量的对象。从类创建的所有对象都有相同的成员:属性、方法和事件。但是,每个对象都象一个独立的实体一样动作。例如,一个对象的属性可以设置成与同类型的其他对象不同的值。
类定义的一般形式如下:
class Name {
public:
类的公有接口
private:
私有的成员函数
私有的数据成员定义
};
类的定义由 类头 和 类体 两部分组成。类头由关键字 Class 开头,然后是类名,其命名规则与一般标识符的命名规则一致。类体包括所有的细节,并放在一对花括号中。类的定义也是一个语句,所以要有分号结尾,否则会产生编译错误。
类体定义类的成员,它支持两种类型的成员:
(1)数据成员,它们指定了该类对象的内部表示。
(2)成员函数,他们指定了该类的操作。
类成员有3种不同的访问权限:
(1)公有( public )成员可以在类外访问。
(2)私有( private )成员只能被该类的成员函数访问。
(3)保护( protected )成员只能被该类的成员函数或派生类的成员函数访问。
数据成员通常是私有的,成员函数通常有一部分是公有的,一部分是私有的。公有的函数可以在类外被访问,也称之为类的接口。可以为各个数据成员和成员函数指定合适的访问权限。
封装
封装 (encapsulation)
隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别.
封装 (encapsulation)
封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过 外部接口,一特定的访问权限来使用类的成员。
封装在网络编程里面的意思, 当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络,其中每一层对收到的数据都要增加一些首部。
封装的大致原则
1把尽可能多的东西藏起来.对外提供简捷的接口.
2把所有的属性藏起来.
例如,在抽象的基础上,我们可以将时钟的数据和功能封装起来,构成一个时钟类。
按c++的语法,时钟类的声明如下:
class Clock
{
public: //共有成员,外部接口
void SetTime(int NewH,int NewM,int NewS);
void ShowTime();
private: //私有成员,外部无法访问
int Hour,Minute,Second;
}
可以看到通过封装使一部分成员充当类与外部的接口,而将其他的成员隐蔽起来,这样就达到了对成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。
接口
同一计算机不同功能层之间的通信规则称为接口。
对协定进行定义的引用类型。其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员。
对象
对象(object)是一件事、一个实体、一个名词,可以获得的东西,可以想象有自己的标识的任何东西。对象是类
对象(object)是一件事、一个实体、一个名词,可以获得的东西,可以想象有自己的标识的任何东西。对象是类的实例化。一些对象是活的,一些对象不是。比如这辆汽车、这个人、这间房子、这张桌子、这株植物、这张支票、这件雨衣。 概括来说就是:万物皆对象。
面向对象(ObjectOriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
在ASP动态网页中,对象是一个抽象的概念,是要操作的目标。比如,在现实生活中,电脑就是我们搜寻资料的一个对象,他具有外观、操作系统、价格等等特点,这在对象概念中被称为属性,而利用这个电脑玩游戏、看电影、查找资料等用途,这就对应于对象里的方法,另外,主板、CPU、显卡、键盘等等组件,我们可以称作对象的集合。
的实例化。一些对象是活的,一些对象不是。比如这辆汽车、这个人、这间房子、这张桌子、这株植物、这张支票、这件雨衣。 概括来说就是:万物皆对象。
面向对象(ObjectOriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
在ASP动态网页中,对象是一个抽象的概念,是要操作的目标。比如,在现实生活中,电脑就是我们搜寻资料的一个对象,他具有外观、操作系统、价格等等特点,这在对象概念中被称为属性,而利用这个电脑玩游戏、看电影、查找资料等用途,这就对应于对象里的方法,另外,主板、CPU、显卡、键盘等等组件,我们可以称作对象的集合。
定义类
成员变量和成员函数
变量是一个值,例如:a,21,M这类的。函数是一个处理规则,比如说,开始是个什么,经过这个函数后,结果要让它变成什么。
一般在一个类中,前面是成员变量,属性为private;后面是成员函数,属性为public。
公有和私有
公有成员可以被外界调用,私有成员不能被外界调用。
声明对象
通过声明对象执行类的行为!语法如下:
Cat Kitty = new Cat( );
如果创建同一个类的多个对象,则它们共享函数成员代码,但不共享成员数据,每个对象都会在内存中开辟新的空间来存储自己的数据成员。
属性
举个最简单的属性的例子,如果类的成员变量被设为private,但是我们又要在其他类中得到他的值怎么办?我们可以为这个变量设个只读的属性,使其他类可以通过这个属性访问它,但是不能修改它,也就是使这个变量在其他类看来是只读的。实例代码如下: using System; class MyClass { private int num;//该成员是私有的 public int Num { get { return num; } } public MyClass(int num) { this.num = num; } } class Test { public static void Main() { MyClass c = new MyClass(5); Console.WriteLine(c.Num);//这里我们就是通过属性Num访问私有成员num } }
构造函数
1默认构造函数
每个类都有一个默认的与类同名的构造函数,当创建对象时,系统会调用默认的构造函数,用默认值初始化所有成员变量。
构造函数总是存在的,即使没有显式定义,编译器也会为类分配一个默认的构造函数。
2带参数的构造函数
除了默认构造函数,我们还可以定义带参数的构造函数,带参数的构造函数可以用指定的值初始化类的成员变量。
构造函数是一种特殊的函数,它必须和类同名,并且没有返回类型。
3无参数构造函数
当用户定义了无参数的构造函数后,系统会用自定义的构造函数代替默认的构造函数,用自定义的构造函数中的代码初始化变量。
class Cat
{
//构造函数:无参数
public Cat()
{
name=”Kitty”;
age=3;
}
public Cat(string nameValue, int ageValue)
{
//初始化变量
name=nameValue;
age=ageValue;
}
//其他成员
……;
}
析构函数和垃圾回收
析构函数和构造函数正好相反.
构造函数是和类同名.没有返回值.
析构函数是在类名前加~.也没有返回值.
构造函数上在对象创建时执行.
析构函数是在程序结束时执行.
一般时候析构函数里面写的都是一些资源回收之类的东西. 不过C#的析构函数并不能保证每次都会调用.所以最好不要利用C#的析构函数来回收资源.
例:
class Cat
{//构造函数
public Cat(string nameValue, int ageValue)
{
name = nameValue;
age=ageValue;
Console.WriteLine(“一只猫诞生了!(调用构造函数)”);
}
//析构函数
~Cat( )
{
Console.WriteLine(“这只猫去天堂了~~~(调用析构函数)”);
}
}
浙公网安备 33010602011771号