当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 我们知道, C#的语法与C++非常相似,实现从C++向C#的转变,其困难不在于语言本身,而在于熟悉.NET的可管理环境和对.NET框架的理解。
 

 

    摘要: <<展现c#>> 第二章 ngws runtime 技术基础(rainbow 翻译) 出处:http://www.informit.com/matter/ser0000001/chapter1/ch02.shtml 正文: 第二章 ngws runtime 技术基础 既然你已经具有了c#全面的印象,我也想让你了解ngws runtime的全......
    摘要: <<展现c#>> 第七章 异常处理(rainbow 翻译) 出处:http://www.informit.com/matter/ser0000002 正文: 第七章 异常处理 通用语言运行时(clr)具有的一个很大的优势为,异常处理是跨语言被标准化的。一个在c#中所引发的异常可以在visual basic客户中得到处理。不再有 hresults......


C++编程人员容易犯的10个C#错误 <>
  我们知道, c#的语法与c++非常相似,实现从c++向c#的转变,其困难不在于语言本身,而在于熟悉.net的可管理环境与对.net框架的理解.

尽管c#与c++在语法上的变化是很小的,几乎不会对我们有什么影响,但有些变化却足以使一些粗心的c++编程人员时刻铭记在心.在本篇文章中我们将讨论c++编程人员最容易犯的十个错误. 【程序编程相关:利用JAXB通过XML模式生成XML文档

【推荐阅读:有数据绑定、排序、查找功能的ListVi

陷阱1: 没有明确的结束方法 【扩展信息:XML应用-利用XML与XSL

几乎可以完全肯定地说,对于大多数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方法了.
...   下一页
    摘要: 5.3 类属性 有两种途径揭示类的命名属性——通过域成员或者通过属性。前者是作为具有公共访问性的成员变量而被实现的;后者并不直接回应存储位置,只是通过 存取标志(accessors)被访问。 当你想读出或写入属性的值时,存取标志限定了被实现的语句。用于读出属性的值的存取标志记为关键字get,而要修改属性的值的读写符标志记为set。 在你对该理论一知半解以前,请看一下清单5.......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE