C++编程人员轻易犯10个C#错误.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++编程人员轻易犯的10个C#错误 学习各种外挂制作技术,马上去百度搜索 魔鬼作坊 点击第一个站进入、快 速成为做挂达人。 我们知道,C#的语法与C++非常相似,实现从C++向C#的转变,其困难不在于语言本身,而 在于熟悉。NET的可治理环境和对。NET框架的理解。尽管C#与C++在语法上的变化是很小 的,几乎不会对我们有什么影响,但有些变化却足以使一些粗心的C++编程人员时刻铭记在 心。在本篇文章中我们将讨论C++编程人员最轻易犯的十个错误。 错误1: 没有明确的结束方法 几乎可以完全肯定地说,对于大多数C++编程人员而言,C#与C++最大的不同之处就在 于碎片收集。这也意味着编程人员再也无需担心内存泄露和确保删除所有没有用的指针。但 我们再也无法准确地控制杀死无用的对象这个过程。事实上,在C#中没有明确的 destructor. 假如使用非可治理性资源,在不使用这些资源后,必须明确地释放它。对资源的隐性控 制是由Finalize方法(也被称为finalizer)提供的,当对象被销毁时,它就会被碎片收 集程序调用收回对象所占用的资源。finalizer该当只释放被销毁对象占用的非可治理性资 源,而不应牵涉到其他对象。假如在程序中只使用了可治理性资源,那就无需也不应当执行 Finalize方法,只要在非可治理性资源的处理中才会用到Finalize方法。由于finalizer 需要占用一定的资源,因此应当只在需要它的方法中执行finalizer.直接调用一个对象的 Finalize方法是绝对不答应的(除非是在子类的Finalize中调用基础类的Finalize.),碎 片收集程序会主动地调用Finalize. 从语法上看,C#中的destructor与C++非常相似,但其实它们是完全不同的。C#中的 destructor只是定义Finalize方法的捷径。因此,下面的二段代码是有区别的: ~MyClass() { // 需要完成的任务 } MyClass.Finalize() {// 需要完成的任务 base.Finalize(); } 错误2:Finalize和Dispose使用谁? 从上面的论述中我们已经很清楚,显性地调用finalizer是不答应的,它只能被碎片收 集程序调用。假如期望尽快地释放一些不再使用的数量有限的非可治理性资源(如文件句 柄),则该当使用IDisposable界面,这一界面有个Dispose方法,它能够帮你完成这个任 务。Dispose是无需等待Finalize被调用而能够释放非可治理性资源的方法。 假如已经使用了Dispose方法,则应当阻止碎片收集程序再对相应的对象执行Finalize 方法。为此,需要调用静态方法GC.SuppressFinalize,并将相应对象的指针传递给它作为 参数,Finalize方法就能调用Dispose方法了。据此,我们能够得到如下的代码: public void Dispose() { // 完成清理操作 // 通知GC不要再调用Finalize方法 GC.SuppressFinalize(this); } public overridevoidFinalize() { Dispose(); base.Finalize(); } 对于有些对象,可能调用Close方法就更合适(例如,对于文件对象调用Close就比 Dispose更合适),可以通过创建一个private属性的Dispose方法和public属性

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档