知识大全 C#中构造函数和析构函数的用法(三)
Posted 函数
篇首语:非淡泊无以明志,非宁静无以致远。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#中构造函数和析构函数的用法(三)相关的知识,希望对你有一定的参考价值。
C#中构造函数和析构函数的用法(三) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
B b = new B(); //执行基类A的构造函数A() 再执行派生类的构造函数B()
B b = new B( ); //执行基类A的构造函数A() 再执行派生类的构造函数B(int)
B b = new B( ); //执行执行基类A的构造函数A(int) 再执行派生类的
构造函数B(int int)
在这里构造函数的执行次序是一定要分析清楚的 另外 如果基类A中没有提供无参构造函数public A( ) x = ; 则在派生类的所有构造函数成员初始化表中必须指出基类A的有参构造函数A(i) 如下所示
class A private int x; public A( int i ) x = i; ; class B : A private int y; public B():A(i) y = ; public B(int i):A(i) y = i; public B(int i int j):A(i) y = j; ;
三.析构函数和垃圾回收器在C#中的运用
析构函数是实现销毁一个类的实例的方法成员 析构函数不能有参数 不能任何修饰符而且不能被调用 由于析构函数的目的与构造函数的相反 就加前缀 ~ 以示区别
虽然C#(更确切的说是CLR)提供了一种新的内存管理机制 自动内存管理机制(Automatic memory management) 资源的释放是可以通过 垃圾回收器 自动完成的 一般不需要用户干预 但在有些特殊情况下还是需要用到析构函数的 如在C#中非托管资源的释放
资源的释放一般是通过 垃圾回收器 自动完成的 但具体来说 仍有些需要注意的地方
值类型和引用类型的引用其实是不需要什么 垃圾回收器 来释放内存的 因为当它们出了作用域后会自动释放所占内存 因为它们都保存在栈(Stack)中;
只有引用类型的引用所指向的对象实例才保存在堆(Heap)中 而堆因为是一个自由存储空间 所以它并没有像 栈 那样有生存期( 栈 的元素弹出后就代表生存期结束 也就代表释放了内存) 并且要注意的是 垃圾回收器 只对这块区域起作用;
然而 有些情况下 当需要释放非托管资源时 就必须通过写代码的方式来解决 通常是使用析构函数释放非托管资源 将用户自己编写的释放非托管资源的代码段放在析构函数中即可 需要注意的是 如果一个类中没有使用到非托管资源 那么一定不要定义析构函数 这是因为对象执行了析构函数 那么 垃圾回收器 在释放托管资源之前要先调用析构函数 然后第二次才真正释放托管资源 这样一来 两次删除动作的花销比一次大多的 下面使用一段代码来示析构函数是如何使用的
public class ResourceHolder … ~ResourceHolder() // 这里是清理非托管资源的用户代码段
四.小结
cha138/Article/program/net/201311/14870相关参考
C#中构造函数和析构函数的用法(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 声明了一个类
类构造函数 本节将讨论三种类构造函数 类构造函数的类型 注释 实例 用于创建并初始化类的实例 私有 在类之外不可访问的特殊类型实例构造函数无法用私有构造函数来实例化类 静态 在创
类有一个特殊的成员函数叫做构造成员函数它通常用于初始化类的数据成员在创建对象时会自动调用类的构造成员函数Java中的构造成员函数必须与该类具有相同的名字另外构造成员函数一般都应用public类
C++中是不允许virtual构造函数的如果在构造函数前加virtual 以vc为例编译器报错为inlineistheonlylegalstorageclassforconstructors
知识大全 编写类String 的构造函数、析构函数和赋值函数
编写类String的构造函数、析构函数和赋值函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!已知
C#默认构造函数的作用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 构造函数主要用来初始化对象
C#构造函数的继承问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先说明下之所以用双引号是
析构函数是通过下面的形式声明的 [attributes]~identifier()destructorbody 其中 attr
C#箴言:使用构造函数初始化语句 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
C#时间函数的用法时间格式输出 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 今天恰好周末有时间