C#基础:构造函数与析构函数
1、我们先写一个例子,
方便后面的讲解。
如下图:

2、上步中我们定义了一个Person,
在Main()方法中,定义了一个Person的实例。
大家看看定义Person的语句,
Person person = new Person();
为什么要在new Person后面加一对括号呢。
我们在调用某一方法时,会使用括号。
这会不会也是在调用某一个方法呢。
是的,它是调用的Person类的构造方法。

3、可是我们看到,Person类里空空如也。
没有定义任何的方法呀。
那么第一个知识点来啦:
当一个类,没有定义任何的构造方法时,
C#会自定添加一个没有任何参数的构造方法。

4、下面我们定义一个构造方法,
并写代码验证new Person()语句,
调用了构造方法,
如下图:

5、从上图中可见,
Main函数中只有一条new语句,
如果输出“Person构造方法”,
就说明:new语句调用了构造方法。
下图是输出结果:

6、通过上图的输出结果,
可以得出,new语句确实调用了构造方法。
下面第二个知识点,构造方法的书写形式。
首先是权限描述符 public/protected/private。
然后方法名和类名一致,不能是其它的名字。后面是参数列表。
注意:构造函数不能有返回值,也不能加void。

7、介绍了构造函数的写法,
下面讲构造函数的第三个知识点,
构造函数可以重载。
也就是说可以定义多个构造函数。
比如我们再定义有参数的Person构造方法。
如下图:

8、那么问题来了,
此时有两个构造方法,
当定义Person类的实例时,
到底调用哪个构造函数呢?
这个需要根据New语句来判断。
New Person()语句,调用的就是无参的构造方法。
New Person("Tom")语句,调用的就是有参的构造方法。
下面写代码进行验证,调用有参的构造方法。


9、根据构造函数的特点,
实际编程中,可以使用构造函数传递类属性的初始值,
也可以在构造函数中,做一些必须的初始化工作。
如下图:

10、下面说说析构函数,
析构函数是在类消亡的时候调用的,
由于C#是自定回收类机制,
所以没法手动调用到构造函数。
下面就演示一下,析构函数的写法吧
如下图:

11、根据析构函数的特点:
在实际编程中,
把改类申请的资源,
都在析构函数中释放掉。
