当前位置:首页 > 日记 > 正文

在C的构造函数和析构函数#使用

在C的构造函数和析构函数#使用
摘要:构造函数和析构函数是一种出现在一类更简单的功能,但总有在实际应用过程中的一些意外的操作失误,本文将系统地介绍构造函数和析构函数和C #应用原理,以及在使用过程中应注意的事项。

关键词:构造函数;析构函数;垃圾回收器;非托管资源;资源管理

第一.构造函数和析构函数的原理

作为一种更高级的语言比C,C #提供更好的机制来提高程序的安全性。C #编译器具有严格的类型安全检查功能,它几乎可以找到程序中所有的语法问题,这确实有助于程序员,但程序已经通过编译检查并不意味着不存在错误。在错误的大家庭中,语法错误的位置只能是冰山一角,高水平的错误通常是隐藏的,不容易找到。

根据经验,许多检测的程序错误引起的变量未初始化或清除正确,并初始化和消除是很容易被忘记。面向对象的概念是在C语言#设计充分考虑,并很好的解决:把对象的初始化在构造函数和析构函数中的结算工作。创建对象时,构造函数自动执行。当目标死亡,析构函数自动执行。这样,你不用担心忘记初始化和清理的对象。

两。在C #构造函数的使用

构造函数的名字不能随便对待,必须由编译器识别是自动执行。其命名方法既简单又合理:让构造函数有类相同的名称。除了名字,构造函数的另一特色是没有返回值类型,它不同于返回无效型的功能。如果它有一个返回值类型,编译器会不知所措。在你访问一个类的方法,属性,或是其他的什么,第一个声明构造函数包含相应的类。即使你不自己写一个构造函数,你将会有一个默认构造函数。

TestClass类
{
(但):公共基础(){ } / /由CLR
}

下面列出了几种类型的构造函数

1)默认构造函数

TestClass类
{
(但):公共基础(){ }
}

如上所述,它由系统(CLR)提供。

2)实例构造函数

实例构造函数是实现类中实例初始化的方法的一个成员:

使用系统;
类点
{
公共双x,y;
公共点()
{
这个,x=0;
这个,y=0;
}

公共点(双x,双Y)
{
这个;
这个,y = y;
}

}

类测试
{
静态空隙主()
{
点=新点();
点b =新点(3, 4);使用构造函数初始化对象

}
}

一类是宣称,它提供了两个构造函数。他们是沉重的负担。一个是点构造函数没有参数和一个双参数点的构造函数。如果这些构造函数不在类提供,CLR会自动提供一个默认构造函数,但是一旦一个自定义的构造函数是类提供,如点()和点(x,y),默认构造函数将不提供,应注意。

3)静态构造函数

静态构造函数是初始化类的方法的成员,通常用于初始化静态数据。静态构造函数不能有参数,不能有修饰符,不能调用,当装入类时,自动调用类的静态构造函数:

使用系统数据;
员工类
{
专用静态数据集DS;
静态员工()
{
DS =新的数据集(…);
}

}

声明一个具有静态构造函数的类雇员,指出静态构造函数只能初始化静态数据成员,而不能初始化非静态数据成员。但是,非静态构造函数可以将值赋给静态数据成员或初始化非静态数据成员。

如果类只包含静态成员,您可以创建一个私有构造函数:私人TestClass(){…},但私人意味着它是不可能从类的外部访问构造函数。因此,它不能被调用的,没有对象可以被实例化的类定义。

这些是几种类型构造函数的简单应用程序。接下来,我们将重点讨论在类的层次结构中使用基类和派生类的构造函数的方法。派生类对象的初始化是由基类和派生类一起完成的。基类的成员是由基类的构造函数初始化的,派生类的成员是由派生类的构造函数初始化的。

当创建派生类的对象时,系统将调用基类的构造函数和派生类的构造函数。构造函数的执行顺序是执行基类的构造函数的第一,然后执行派生类的构造函数,如果派生类对象的成员,它执行基类的构造函数的第一,然后执行成员对象类的构造函数,最后执行派生类的构造函数。

对于执行基类的任何构造函数,默认情况是执行基类的无参数构造函数。如果要执行基类的参数构造函数,必须在派生类构造函数的初始化表中指出:

班上的一个
{私有int;
公共a(){ x=0;}
公共a(int)x i =;}
};

乙类:A
{私人int;
公共b(){ = 0;}
公共b(int)
公共b(int i,int):a(i){ j=;}
};

b =新(b); A(基类构造函数执行),然后派生类构造函数执行(b)
b =新的b(1);;a(基类构造函数的执行),然后派生的类构造函数被执行B(int)
B B3 =新的B(0,1); / /一个基类的构造函数被执行(int),然后派生类

Constructor B(int,int)

这里必须清楚地分析构造函数的执行顺序。此外,如果基类A中没有参数构造函数,公共A()= 0;},在派生类的所有构造函数成员的初始化表中,我们必须指出基类A有一个参数构造函数A(i),如下所示:

班上的一个
{私有int;
公共a(int)x i =;}
};

乙类:A
{私人int;
公共b():a(i)=y=0;}
公共b(int):a(i){ i =;}
公共b(int i,int):a(i){ j=;}
};

三。析构函数和C #垃圾收集器的使用

析构函数是实现破坏类的实例的方法的一个成员。析构函数没有参数,没有修饰符,也不能调用。因为析构函数的目的与构造函数相反,我们添加前缀~表示差异。

虽然C #(特别是CLR)提供了一种新的内存管理机制,自动内存管理(自动内存管理),释放资源可以被垃圾回收器自动完成,无需用户干预,但在某些特殊情况下或需要使用析构函数,在C #在非托管资源的释放。

资源的释放通常是由垃圾回收器自动完成的。

1。值类型和引用类型引用不需要任何垃圾收集器来释放内存,因为当它们超出范围时,它们将自动释放内存,因为它们都存储在堆栈(堆栈)中。

2。只是引用一个引用类型,把一个对象的实例存储在堆(堆)中,并且因为堆栈是一个空闲的存储空间,所以它不象一个堆栈作为生存(堆栈元素的弹出后生存期,也代表内存的释放)。值得注意的是,垃圾收集器只在这个区域起作用;

然而在某些情况下,当非托管资源发布,代码必须解决。通常,析构函数来释放非托管资源,这是由用户编写的释放非托管资源的代码段放置在析构函数。注意,如果使用非托管资源不是一类,那你一定没有定义析构函数,这是因为执行对象的析构函数,然后垃圾收集器在析构函数释放资源的管理在叫,然后第二次真正释放非托管资源,作为一个结果,两缺失。超过一次的成本。使用一段代码来显示如何使用析构函数:

resourceholder公共类
{

~ resourceholder()
{
下面是用户代码清理非托管资源
}

}

四。总结

尽管构造函数和析构函数函数类是非常简单的,但是它们的使用并不像看上去那么简单,因此使用构造函数和析构函数的内存管理机制是灵活的,正确的可以帮助您更好地理解CLR,更好地理解资源管理系统。

相关文章

Opera11.10测试版将于3月18日正式

Opera11.10测试版将于3月18日正式

将于,测试版,正式发布,电脑软件,Opera 11.10快照2047发布已经恢复了大部分的问题,这是非常接近的Opera 11.10 beta版,将于明天公布,但这是一个开发版,不推荐普通用户,仅用于测试。有许多已知的问题,在这个版本中,这可能会导致崩溃或数据损失,甚至不…

谷歌计划对YouTube进行更改

谷歌计划对YouTube进行更改

计划,电脑软件,YouTube,谷歌计划对YouTube进行更改 到目前为止,谷歌的视频分享网站YouTube已经免费,向广告商提供这项服务,但每天要为谷歌烧钱数百万美元,所以富人感觉不太好,所以谷歌计划在YouTube上建立支付系统。 谷歌首席执行官Eric Schmi…

如何获取XML文档的大小

如何获取XML文档的大小

文档,大小,电脑软件,XML,XML文档不是从格式到大小决定的。有些可能只有几行,有些可能只有几兆字节。您可能想知道您是否需要知道XML文档的大小。当性能成为第一个问题时,知道XML文档的大小是必须做的事情。 从性能的角度来看,有两种方法来处理…

添加标签来运行Win7开始菜单的方法

添加标签来运行Win7开始菜单的方法

运行,标签,开始菜单,方法,电脑软件,加{ }标签运行windows7的{开始}菜单,方法如下: 单击{ }菜单右键单击{}从弹出任务栏和开始菜单属性窗口中选择开始菜单中的自定义。检查在弹出自定义开始菜单的操作命令,如上图所示,运行命令栏出现在Win7的开…

数据结构与算法的C实现#系列---N叉

数据结构与算法的C实现#系列---N叉

算法,叉树,数据结构,系列,电脑软件,算法与数据结构(C #实施)--- N叉树系列(二) Heavenkiller(原创) 公共覆盖的程度 { 得到 { 返回this.degree; } } 仅用于空树节点 公共虚拟无效attachkey(对象_obj) { 如果(!IsEmpty()) 抛出新的异常():这个节…

FlashGet到FTP服务器中的应用

FlashGet到FTP服务器中的应用

应用服务,服务,器中,电脑软件,FlashGet,最近,我一直忙于FTP在影视论坛下载电影。有一天,论坛关闭,因为失败是暂时的,但FTP并没有受到影响。当一部电影下载,我想下载一部电影,我突然发现我已经忘了FTP的登录密码。因为你无法登录到FTP,你不能看到它…

盗版Windows7已经卖了好几个月了。

盗版Windows7已经卖了好几个月了。

好几个,卖了,月了,电脑软件,近日,全球IT服务提供商国际公司的研究数据(IDC)发布了新一代微软Windows7操作系统的全球经济影响的研究报告(的研究报告,在中国的一个地区;说)Windows7微软每收入1元,将创造约27.54元收入国内IT生态系统。按照计划,Window…

如何延长Win7——如何延长免费试用

如何延长Win7——如何延长免费试用

试用期,电脑软件,如果你没有安装Windows7的授权码,安装该系统后,将有30天的免费试用。30天后,将是黑屏。如果您想要延长免费试用期,您可以使用以下方法。 点击{开始}进入slmgr。vbs /武装在搜索程序和文件打开命令。当计算机重新启动时,它将返…

四月愚人节在互联网上防范链接陷阱

四月愚人节在互联网上防范链接陷阱

链接,互联,愚人节,陷阱,网上,四月愚人节在互联网上防范链接陷阱 Ldquo;昨天是一个假游戏点卡淘宝店坑钱,愤怒到报告,即使报告网站也是钓鱼网站的结果!网友sivaria很生气的时候,在网上发帖,她不认为她刚刚进入四月的愚人节,落入钓鱼网站的陷阱。假…

白色iPhone4英国官方网络正式启动

白色iPhone4英国官方网络正式启动

网络,英国,正式启动,白色,官方,最新消息,今天,三的官方网站上,英国的运营商,已经出现在iPhone4的售前页白版24个月。 的价格,因为它是合同的一部分,所以我们的实际参考意义的英国运营商3的价格,但值得注意的是,从预购页面的官方网站上,白色版和黑色…

解决win7麦克风回声问题,win7麦克风

解决win7麦克风回声问题,win7麦克风

回声,麦克风,回音,电脑软件,当winodws7系统使用一个麦克风听到回声,可以采用以下方法解决: 点击{开始} - { } { }控制面板-声音声音窗口打开后,选择记录,选择默认的麦克风,点击下面的属性,像上面,然后听听众的听众的财产,听钩前听装置。然后确保它…

禁用浏览器的后退按钮

禁用浏览器的后退按钮

浏览器,按钮,电脑软件,浏览器的后退按钮,方便我们返回到以前访问过的网页,这无疑是非常有用的,但有时我们不得不关闭这个功能防止用户破坏页面访问顺序。介绍了各种禁用浏览器的后退按钮,可以在网络上找到,并分析了各自的优缺点及适用情况。 首…