第3篇 构造函数与析构函数

对象的生命周期

       对象作为类的实例,在程序运行过程中需要占用一定的内存空间,.NET公共语言运行时负责其内存管理,在对象出生时,为其分配内存,在对象销毁时再收回它所占用的内存。

       值类型变量在“栈”中管理,栈是一种按照“先进后出”方式存取的内存区域。当方法被调用时,方法进栈,方法内的值类型变量(包括行参变量)自动获取内存,当方法调用结束时,这些变量所占用的内存会被自动释放。

        引用类型变量在“堆”中管理,在方法调用的过程中,一旦使用了运算符new实例化了对象,.NET公共语言运行时就会立刻在堆中分配内存给该对象。而当方法调用结束时候,对象所占用的内存不会自动从堆中释放。在.NET中,对象所占用的内存智能有公共语言运行时的垃圾回收器(GC)来回收,垃圾回收器没有预定的工作模式,他的工作时间间隔是不可预知的,通常在计算机内存不足的时候才自动启动。

 

图1-1 对象生命周期

构造函数

       构造函数的命名与类名相同,它的作用主要用来初始化对象。一个类可以有多个构造函数,即构造函数重载。

.      构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;

当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。

三 析构函数

       析构函数的命名是在类名前加“~”的方式命名,它作用是用来回收类的实例所占用的资源,对象在销毁前,公共语言运行时会自动调用析构函数并使用垃圾回收器回收对象的内存空间。

  1. 每个类只能有一个析构函数,析构函数不能继承,也不能重载。
  2. 析构函数没有修饰符,没有参数。
  3. 析构函数中不能包含对Object.Finalize方法的调用,因为公共语言运行时会在析构函数被调用时自动调用Object.Finalize方法。
  4. 结构中不能定义析构函数。

      备注:构造函数是用来创建对象的,每个被创建的对象有自己独立的属性和方法。然而实际开发中,有些属性和方法并不具有特殊性,类的每一个对象其某个属性或者方法可以完全一致,此时我们可以将此属性或者方法标为静态。更多内容请查看4篇 静态

posted @ 2017-11-21 14:51  Hansen'sblog  阅读(309)  评论(0编辑  收藏  举报