日期:2014-05-17  浏览次数:20977 次

C#总结(二)—构造函数和析构函数

 一、对象的初始化

        VB中我们定义变量时,给变量分配一定的空间,但并没有要求对变量进行初始化。

        对象定义时就不同了。对象是类的实例化,是确实存在的实体,一旦建立了对象不但要为其分配内存控件,而且要保证对象的所有属性有确定的意义。也就是在创建对象时(new)就进行初始化

  1、建立类  

 class Student

        {

            private string _no;

            private int _age;

            public string StudentNo

            {

                get { return _no; }

                set { _no= value; }

            }

 

            public int StudentAge

            {

                get { return _age; }

                set { _age= value; }

            }

        }       

  2、实例化对象

 private void button1_Click(object sender,EventArgs e)

        {

            Student zhang = new Student();                //创建对象,也初始化构造函数

            //以下其实是使用了类的编译器set

            zhang.StudentNo ="000001";

            zhang.StudentAge = 16;

            //显示对象的内容,其实是使用了类的读取器get

            label1.Text= zhang.StudentNo +zhang.StudentAge;

        }

注意:get{}和set{}为访问器。get为读取,set为编写。只读取数据用get;相反则用set。其中set中的“value”为用户赋给成员的值。

二、什么是构造函数和析构函数?怎样去用它们?

 1、构造函数

(1)定义:是一种特殊的成员函数,它主要用于为对象分配空间,进行初始化。

(2)特性:

  1. 其名字必须与类名相同
  1. 它可以有任意类型的参数,但不能指定返回类型(void类型也是不合法的)。它有隐含的返回值,该值由系统内部使用。
  2. 它是特殊的成员函数(在C++中,其函数体可写在类体内,也可写在类体外)
  3. 它可以重载(一个类中可以定义不同参数个数或不同类型的构造函数)。若系统无显示定义构造函数,系统会自己生成一个缺省的构造函数(不做任何事情)
  4. 它被声明为公有函数,但它不能向其他成员函数那样被显示的调用,它是在定义对象的同时被调用。

(3)实例

class Cat()                                           //声明Cat类

  {

      public string name;                         //成员变量

      public Cat(stringname)                 //利用构造函数为初始的Cat赋初值

      {

           this.name=name;                    //进行赋值

        }

   }

2、析构函数

(1)定义:如同构造函数可以自动进行对象属性的初始化一样,C#也会自动调用一个函数注销该对象并进行资源的释放与清理工作,这个工作就即析构函数。

(2)特性:

  1. 名字与类名相同,前加“~”。
  2. 它是无类型,无参数的。因为它只需释放资源,不用返回任何调用结果。
  1. 一个类只有一个析构函数,不能随意调用,只在对象注销时,自动调用。
  1. 同构造函数,若无定义析构函数,系统会自动生成一个。

(3)实例

  class Cat()

  {

      ……

    ~ Cat()   

       {

            console.WriteLine();

        }

   }

注意:

三种情况调用析构:

对象注销时,会自动调用析构函数

对象定义在一个函数体,函数运行结束时,自动撤销对象,析构函数也被自动调用。

若对象由new动态创建,在用delete释放它时,其析构函数被自动调用(若不用delete释放,则系统不会调用析构函数)