7、你们先聊,我先走了!

小色:半天没轮到咱俩说话了,咱继续聊!刚才说到你想让我对象临走的时候打个招呼对吧?

小力:呼~~Zzzzz~

小色:小猪,醒醒,圣代都吃鼻子里了。给你讲个新东西,是与构造函数对应的,叫析构函数

小力:啊……好啊,服务员~拿点纸!还真吃鼻子里了……

小色:晕,猪也不用鼻子吃东西啊。析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做清理善后的工作,比如资源释放之类的。但是由于C#已经自带了垃圾回收机制,所以析构函数在C#中已经不怎么用了,而C++中出现的次数明显多一些。

小力:你的意思是说想把“ByeBye”放到析构函数中让她自动说?这个办法倒是不错,虽然不是资源的释放,可是也能体现出来析构函数的执行顺序和用途。

小色:析构函数的定义特简单,跟定义构造函数一样,只需要在前面加上”~”符号就可以了。不过析构函数没有参数没有访问类型,并且类中只能定义一次。

小力:说了这么多,写出代码来看看吧!

//Girl类:

using System;

class Girl

    {

        public string name;//字符串型,用来保存姓名

        public uint high;//无符号整型,用来保存身高

        public int weight;//有符号整型,用来保存体重

        private int age;//有符号整型,用来保存年龄

        public Girl()

        { //显式声明无参构造函数  }

        public Girl(char sex)

        {//构造方法。通过构造方法的参数传递,来给Sex属性赋值

            this.Sex = sex;

        }

        ~Girl()

        {//析构函数

            Console.WriteLine("析构函数:你们先聊,我先走了!ByeBye~~");

            Console.ReadLine();

        }

        private char sex;//改为私有变量,用来保存性别

        public char Sex

        {//性别属性

            get { return sex; }//在外部和内部都可以调用访问器

            private set { sex = value; }

            //私有设置器,只能在本类中调用修改器

        }

        public int Age

        {

            get

            {  return age;  }

            set

            {

                if (value > 0 && value < 100)

                { age = value; }

                else

                { age = 18; }

            }

        }

        public void Cook()

        {//定义做饭方法

            Console.WriteLine("红豆,大红豆,芋头~~ 锉锉锉锉……");

        }

        public void Introduce()

        {//定义自我介绍方法

            Console.WriteLine("我叫:{0},性别{1},今年{2},身高{3}cm,体重{4}", name, this.Sex, age, high, weight);

        }

 }

// Program测试类

    class Program

    {       

        static void Main(string[] args)

        {

            Girl lili = new Girl('');//实例化一个对象

            lili.name = "莉莉";//给实例变量姓名赋值,注意string类型使用双引号

            lili.Age = 23;//给实例变量年龄赋值

            lili.high = 168;//给实例变量身高赋值

            lili.weight = 105;//给实例变量体重赋值

            lili.DoIntroduce();//调用自我介绍方法

            lili.DoCooking();//调用做饭方法

        }

}

结果如下:

我叫:莉莉,性别女,今年23,身高168cm,体重105

红豆,大红豆,芋头~~ 锉锉锉锉……

析构函数:你们先聊,我先走了!ByeBye~~

小力:对啊,这样的话,析构函数就会在对象销毁前自动调用了。

小色:恩,那就总结一下构造函数与析构函数的区别吧。

构造函数

析构函数

构造函数是和类同名.没有返回值

析构函数是在类名前加~.也没有返回值

构造函数上在对象创建时执行

析构函数是在程序结束时执行

构造函数可以有参数

析构函数没有参数

构造函数可以有访问修饰符

析构函数不能加访问修饰符

构造函数可以重载带参

析构函数只能有一个且没有参数

构造函数是创建

析构函数是销毁

小力:看来C#想的是好周到啊。今天你一口气说了这么多的概念,虽然以前都见过,可是你的例子举得挺通俗的,比那些呆板的代码好玩多了。我可得回去好好消化了,这也更让我坚定了学C#的决心,那以后我有什么问题就给你打电话了,可千万别嫌我烦啊。

小色:看你说的,只要我会的,我都会告诉你的。(不会的我查会了也得告诉你啊…我有一颗火热的心…)

(“你这个流氓,为什么不接电话!臭流氓,臭流氓臭流氓,臭流氓……”来自“叫兽”蠢爸爸小星的来电铃声)

 小色:“○◎※→‰€#@♀…”,寒……我妈妈打来的电话。

小力:恩,没事,正好我男朋友也给我发短信找我了,我得走了啊,咱们电话联系啊,我先走了,ByeBye

(晴天那个霹雳啊…一颗火热的心顿时浇了一盆冷水,一触即碎!都怪这个流氓来电铃声!)

小力:“喂!~亲爱的,我在XX街的碰碰凉呢,过来接我吧。我们去看电影去,好,一会见!么么~~

(…咔嚓…哗啦…碎了…孤坐在圆桌前吸着余下的一点酸梅汤,摘过桌旁放的假花,“爱我,不爱我,爱我……”)

 

(请看下回:本节总结

 

完稿日期:2009116  1727