C#入门系列 (十九) -- 作用域、生命期和析构函数
作用域
限定程序中某个名字可用性的代码范围就是这个名字的作用域。
作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。
在同一个作用域中,C#程序中的每个名字与唯一的实体对应;只要在不同的作用域上,程序就可以多次使用相同的名字来对应不同作用域中的不同实体。
类型的作用域
C#中类型的作用域与命名空间密切相关。
在一个命名空间里,类型名称与唯一的一个类型定义对应。
如果在一个命名空间里需要使用在另一个命名空间里定义的类型,则需要使用该类型的完全限定名,或在程序开头使用 using 指令指定该类型所在的命名空间。
变量作用域
C#中包括 4 种变量:局部变量、字段、参数、数组元素。(对象是引用类型的变量)
定义在方法或函数体内的局部变量的作用域有两种情况:
局部变量的作用域从其定义处开始,到该变量所在的块语句或者方法体结束的封闭花括号之前终止;
for、while、do、foreach 等语句中声明的局部变量作用域从变量定义处到该语句体结束。
示例图:
![](https://static001.geekbang.org/infoq/c5/c5e2f69bf1ba094e3fe72695deafadf7.png)
字段的作用域与类的作用域相关,只要类在某个作用域内,其字段也在该作用域内。
方法或函数的参数被认为具有从函数体的开始到函数体结束为止的作用域。
生命期
生命期即生存期,是程序执行过程中实体存在的时间。
C#中具有生存期的元素只有变量(对象被认为是引用类型的变量)。
静态字段的生存期:类的静态字段在包含了它的那个类型的静态构造函数执行之前就存在了,在关联的应用程序域终止时被销毁。
实例字段的生存期:类的实例字段从类的实例被创建开始存在,直到该实例不再被访问时结束存在。结构的实例字段与它所属的结构变量具有完全相同的生存期。
数组元素的生存期:数组的元素在创建数组实例时开始存在,在没有对该数组实例的引用时停止存在。
局部变量的生存期:局部变量的生存期是程序执行过程中的某一段。
参数的生命期:
引用参数不创建新的存储位置。引用参数的值与生存期总是与基础变量相同。
输出参数同样不创建新的存储位置。输出参数的值与生存期总是与基础变量相同。
析构函数
析构函数用以实现销毁对象所需操作。每个类只能有一个析构函数,析构函数不能带参数,不能具有可访问性修饰符。
析构函数只对类的对象起作用,没有静态析构函数;析构函数不能被显式调用,垃圾回收期间会自动调用所涉及类的析构函数。
析构函数形式如下所示:
由于垃圾回收器在决定何时回收对象和运行析构函数方面允许有广泛的自由度,析构函数可以在任何线程上执行以及其他原因,仅当没有其他可行的解决方案时,才应在类中实现析构函数。
版权声明: 本文为 InfoQ 作者【陈言必行】的原创文章。
原文链接:【http://xie.infoq.cn/article/22b7a59c1d69ac1c041990c82】。未经作者许可,禁止转载。
评论