当前位置:嗨网首页>书籍在线阅读

11-构造函数和析构函数

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.3.4 构造函数和析构函数

对象和客观世界中的事物一样,从创建到消亡都有一个生命周期,对象的创建和销毁是通过类的构造函数和析构函数来完成的。

1.构造函数

构造函数是类的特殊方法成员,其名称和类名相同,主要用来完成对象的初始化。

C#通过new创建对象的过程实际上就是调用类的构造函数的过程,创建对象时调用构造函数对对象进行初始化。每个类都有构造函数,如果没有定义,系统也会提供一个默认的构造函数,默认的构造函数一般不进行什么操作。在访问一个类的时候,系统最先执行构造函数中的语句。

2.析构函数

析构函数是对象销毁前释放所占用系统资源的类的成员。析构函数的名字是在类名前面加一个符号“~”。析构函数不接受任何参数,也不返回任何值,例如,

01  public class MyClass     //声明类MyClass
02  {
03          ~MyClass()       //析构函数名
04          { //析构函数  }   //析构函数的内容
05  }
**提示** 一个类只能有一个析构函数,析构函数不能手动调用,是系统自动调用的。

【范例9-3】 定义一个包含构造函数和析构函数的Point类,表示平面上的点坐标。

(1)在Visual Studio 2013中新建C#控制台程序,项目名为“PointClass”。

(2)在Program.cs中的class Program类的前面或者后面添加Point类代码,注意Program类和Point类是并列的,不能嵌套。代码如下(代码9-3-1.txt)。

01  class Point
02  {
03          public int X { get; set; }           //定义属性X,得到和设置点的横坐标
04          public int Y { get; set; }           //定义属性Y,得到和设置点的纵坐标 
05          public Point()                       //无参数构造函数用于初始化
06          {
07                  X = 0; Y =2;                 //初始化
08          }
09          public Point(int val_x,int   val_y)  //有参数构造函数
10          {
11                  X = val_x; Y = val_y;        //用指定的参数初始化X和Y
12          }
13          ~Point()                            //析构函数
14          {
15          Console.WriteLine("析构函数主要用于清理资源!");
16          Console.ReadKey();                 //为了看见析构函数的运行,可以添加此行代码
17          }
18  }

(3)在Program.cs的Main方法中输入以下代码以测试类的成员(代码9-3-2.txt)。

01  Point objPoint1 = new Point();              //创建对象objPoint1,用无参构造函数进行初始化
02  Console.WriteLine("无参数构造函数演示");
03  Console.WriteLine("x="+objPoint1.X  );      //输出objPoint1的横坐标
04  Console.WriteLine("y="+objPoint1.Y);        //输出objPoint1的纵坐标
05  Point objPoint2 = new Point(80,90);         //创建对象objPoint2,用有参构造函数进行初始化
06  Console.WriteLine("有参数构造函数演示");
07  Console.WriteLine("x=" + objPoint2.X);      //输出objPoint2横坐标
08  Console.WriteLine("y=" + objPoint2.Y);      //输出objPoint2纵坐标
09  Console.ReadKey();                          //暂停程序运行,按任意键继续

【运行结果】

单击工具栏中的 按钮,即可在控制台中输出如下图所示的结果。

154.png 【范例分析】

在这个实例中,我们把类Point和控制台应用程序自动生成的Program类放在同一个命名空间中。在步骤(2)中,第5~8行在Point类中定义了一个无参数的构造函数,第9~12行定义了一个有两个参数的构造函数Point(int val_x,int val_y),第13~17行定义了一个析构函数。

【拓展训练】

在【范例9-3】中添加静态构造函数(拓展代码9-3-3.txt)。

【范例9-3】声明的构造函数是非静态的实例构造函数。构造函数也有静态的,静态构造函数用于初始化类中的静态字段成员。在Point类中添加静态构造函数的代码如下。

01  public static int z;  //添加一个静态字段z
02  static Point()        //定义静态构造函数
03  {
04          z =100;       //对静态字段初始化
05  }

在【范例9-3】的Program.cs的Main方法中添加如下代码测试静态构造函数。

01  Console.WriteLine("静态参数构造函数演示");
02  Console.WriteLine("z=" + Point.z);        //通过类名直接访问静态成员

运行结果如下图所示。

155.png