• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
朽木不可雕也!黄金不能吃亦
博客园    首页    新随笔    联系   管理    订阅  订阅
第七章 面向对象编程:类和对象(一)

面向对象的基本概念

类

类(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(“这只猫去天堂了~~~(调用析构函数)”);

}

}

posted on 2009-11-08 23:51  大牙  阅读(238)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3