C#入门系列 -- 作用域、生命期和析构函数

举报
陈言必行 发表于 2022/03/13 10:29:19 2022/03/13
【摘要】 作用域限定程序中某个名字可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。  在同一个作用域中,C#程序中的每个名字与唯一的实体对应;只要在不同的作用域上,程序就可以多次使用相同的名字来对应不同作用域中的不同实体。 类型的作用域C#中类型的作用域与命名空间密切相关。在一个命名空间里,类型名称与唯一的一个类型定义对应。  如果在一个命名...

作用域

限定程序中某个名字可用性的代码范围就是这个名字的作用域。

作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。

  在同一个作用域中,C#程序中的每个名字与唯一的实体对应;只要在不同的作用域上,程序就可以多次使用相同的名字来对应不同作用域中的不同实体。

类型的作用域

C#中类型的作用域与命名空间密切相关。

在一个命名空间里,类型名称与唯一的一个类型定义对应。

  如果在一个命名空间里需要使用在另一个命名空间里定义的类型,则需要使用该类型的完全限定名,或在程序开头使用using指令指定该类型所在的命名空间。

变量作用域

C#中包括4种变量:局部变量、字段、参数、数组元素。(对象是引用类型的变量)

定义在方法或函数体内的局部变量的作用域有两种情况:

  1. 局部变量的作用域从其定义处开始,到该变量所在的块语句或者方法体结束的封闭花括号之前终止;
  2. for、while、do、foreach等语句中声明的局部变量作用域从变量定义处到该语句体结束。

示例图:

字段的作用域与类的作用域相关,只要类在某个作用域内,其字段也在该作用域内。

方法或函数的参数被认为具有从函数体的开始到函数体结束为止的作用域。


生命期

生命期即生存期,是程序执行过程中实体存在的时间。

C#中具有生存期的元素只有变量(对象被认为是引用类型的变量)。

  1. 静态字段的生存期:类的静态字段在包含了它的那个类型的静态构造函数执行之前就存在了,在关联的应用程序域终止时被销毁。

  2. 实例字段的生存期:类的实例字段从类的实例被创建开始存在,直到该实例不再被访问时结束存在。结构的实例字段与它所属的结构变量具有完全相同的生存期。

  3. 数组元素的生存期:数组的元素在创建数组实例时开始存在,在没有对该数组实例的引用时停止存在。

  4. 局部变量的生存期:局部变量的生存期是程序执行过程中的某一段。

  5. 参数的生命期

  • 引用参数不创建新的存储位置。引用参数的值与生存期总是与基础变量相同。
  • 输出参数同样不创建新的存储位置。输出参数的值与生存期总是与基础变量相同。

析构函数

  析构函数用以实现销毁对象所需操作。每个类只能有一个析构函数,析构函数不能带参数,不能具有可访问性修饰符。

  析构函数只对类的对象起作用,没有静态析构函数;析构函数不能被显式调用,垃圾回收期间会自动调用所涉及类的析构函数。

析构函数形式如下所示:

~ 类名()
{
   函数体;
}

  由于垃圾回收器在决定何时回收对象和运行析构函数方面允许有广泛的自由度,析构函数可以在任何线程上执行以及其他原因,仅当没有其他可行的解决方案时,才应在类中实现析构函数。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。