C#构造函数和析构函数

开发 后端
这里介绍C#构造函数和析构函数,一个构造函数总是和它的类名相同,但是,它没有声明返回类型。总之,构造函数总是public的,你可以用它们来初始化变量。

C#构造函数和析构函数

在你可以访问一个类的方法、属性或任何其它东西之前, ***条执行的语句是包含有相应类的C#构造函数和析构函数。甚至你自己不写一个构造函数,也会有一个缺省的构造函数提供给你。

  1. class TestClass  
  2. {  
  3. public TestClass(): base() {}   
  4. // 由编译器提供  

一个构造函数总是和它的类名相同,但是,它没有声明返回类型。总之,构造函数总是public的,你可以用它们来初始化变量。

  1. public TestClass()  
  2. {  
  3. // 在这给变量  
  4. // 初始化代码等等。  

如果类仅包含静态成员(能以类型调用,而不是以实例调用的成员),你可以创建一个private的构造函数。

  1. private TestClass() {} 

尽管存取修饰符在这一章的后面将要大篇幅地讨论,但是private意味着从类的外面不可能访问该构造函数。所以,它不能被调用,且没有对象可以自该类定义被实例化。并不仅限于无参数构造函数——你可以传递初始参数来初始化成员。

  1. public TestClass(string strName, int nAge) { …… } 

作为一个C/C++程序员,你可能习惯于给初始化写一个附加的方法,因为在构造函数中没有返回值。当然,尽管在C#中也没有返回值,但你可以引发一个自制的异常,以从构造函数获得返回值。更多有关异常处理的知识在第七章 "异常处理"中有讨论。

但是,当你保留引用给宝贵的资源,应该想到写一个方法来解决:一个可以被显式地调用来释放这些资源。问题是当你可以在析构函数(以类名的前面加"~"的方式命名)中做同样的事情时,为何还要写一个附加的方法。

  1. public ~TestClass()  
  2. {  
  3. // 清除  

你应该写一个附加方法的原因是垃圾收集器,它在变量超出范围后并不会立即被调用,而仅当间歇期间或内存条件满足时才被触发。当你锁住资源的时间长于你所计划的时间时,它就会发生。因此,提供一个显式的释放方式是一个好主意,它同样能从析构函数中调用。

  1. public void Release()  
  2. {  
  3. // 释放所有宝贵的资源  
  4. }  
  5. public ~TestClass()  
  6. {  
  7. Release();  

调用析构函数中的释放方法并不是必要的——总之,垃圾收集会留意释放对象。但没有忘记清除是一种良好的习惯。以上介绍C#构造函数和析构函数。

【编辑推荐】

  1. 介绍Mono C#编译器
  2. C#运算符重载学习总结
  3. 概述C#语言的结构体
  4. C#遗传算法学习笔记
  5. 讨论C#分部方法
责任编辑:佚名 来源: 51CTO.com
相关推荐

2009-09-03 13:14:55

C#构造函数C#析构函数

2009-07-30 15:24:13

C#析构函数C#构造函数

2010-07-20 09:52:27

Perl构造函数

2010-01-18 15:53:27

C++析构函数

2009-08-13 14:36:40

C#结构体构造函数

2009-07-31 16:06:50

成员函数构造函数C#

2009-07-31 14:15:38

C# 构造函数

2009-08-24 18:09:13

C#构造函数

2010-02-04 16:39:26

C++析构函数

2021-12-11 19:02:03

函数C++对象

2009-07-31 15:37:45

C#静态构造函数

2009-08-20 14:28:00

C#静态构造函数

2009-09-04 11:15:07

选择C#构造函数

2009-07-31 15:44:02

C#静态构造函数

2009-08-14 09:15:28

C#调用构造函数

2011-07-15 01:29:39

C++析构函数

2009-09-02 10:49:46

C#调用析构方法

2009-08-13 17:38:42

C#构造函数

2009-08-13 18:15:06

C#继承构造函数

2010-02-05 13:35:19

C++虚析构函数
点赞
收藏

51CTO技术栈公众号