您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:87 来源:vckbase.com

本文章共13664字,分9页,当前第2页,快速翻页:
 

  对任何阅读以新语法规则编写的代码的人来说,最明显的就是曾经在托管扩展中常用的双下划线来定义垃圾处理类,属性和其它东西的做法已成为过去。一些这样的关键字虽然仍被保留着,还包含了一些新的关键字,但现在 它们已经不被经常使用了,它们也不会影响到代码的可读性。这些双下划线的关键字由两种新的关键字来代替:语境敏感的关键字和组合关键字。语境敏感关键字是在某一语境(译者注:即上下文)才使用的关键字,而组合关键字是在和其 它关键字一起使用的关键字。例如托管扩展中的__property关键字会被property取代(不仅如此,而且用来定义一个属性及其存取机制的全部语法规则都有了戏剧性的优化,使其声明看起来非常类似于C#的语法。(参见 Figure 1)这并不影响你在编码时将"property"看作一个变量的名称来使用。在声明某一类型的属性这一语境中,被解析为"property"的标识仅被视为一个关键字。
  在新语法规则当中,类型以"修饰类"的形式声明,在这样的声明中,用一个"形容词"来描述你在创建哪一种类型的类,如下所示:
  class           N { /*<Char name="#133"/>*/ }; // 本机型

  ref class       R { /*<Char name="#133"/>*/ }; // CLR 引用类型

  value class     V { /*<Char name="#133"/>*/ }; // CLR 值类型

  interface class I { /*<Char name="#133"/>*/ }; // CLR 接口类型

  enum class      E { /*<Char name="#133"/>*/ }; // CLR 枚举类型 

  在之前的语言版本中,类型被声明时就可以确定它的使用范围。只有本机类或结构体和托管值类型可以在栈上创建。托管引用类总是存在于托管堆当中。在 Visual C 2005 中,所有的类型,无论是本机的还是托管的,都将在栈上创建,它使用基于栈的彻底清除语法来完成这一功能。
  要想在本机堆上实例化类型T的一个对象,可以使用"new T"的方法。这样可以返回本机上这一对象的地址指针(这是在Visual Studio .NET 2002 和 Visual Studio .NET 2003中提到的一个叫做__nogc 指针的一个概念)。要想在托管堆上实例化类型T的一个对象,Visual C 2005 引入了 gcnew 这一关键字,它和 new 关键字是一样的使用方法。调用"gcnew T"可以返回指向在托管堆中整个对象的一个句柄。句柄是在 Visual C 2005 中引入的一个新的结构,它类似于在托管扩展中的__gc 指针。想要在栈上实例化T类型的对象,标准的“T t;”就已经足够了。
  为了公平起见,我介绍一下我是如何定义实例化的。托管引用类总是存在于托管堆当中,而本机类型总是存在于栈或者本机堆当中。当一个托管引用被声明为存在于栈上时,实际上编译器还是会在托管堆上对其进行实例化。见 Figure 2。
逆风编程精品

Figure 2 在栈上的托管引用类型

   这样会出现一些问题。当我在栈上的实例超出它的使用范围时会怎样?这个实例将如何被清除掉?许多C#开发人员一直在抱怨C#语言无法彻底的清除垃圾。C#提供关键字的方法使清理IDisposable的对象非常容易,但这需要更多的代码,而且与C 开发人员所熟悉的析构函数相比则显得尤为笨拙。在C#中,安全的清理工作在默认情况下是无法进行的。清理工作需要专门的代码实现。我们以 Figure 3 中的第一个C#代码段为例。StreamReader的对象被声明为在托管堆上创建。当这个方法执行完毕之后,StreamReader的实例就没有任何引用存在了。然而,直到垃圾收集程序运行时,这个对象才会被清理掉。直到那时,所用的文件才会被关闭,在此之前,这个应用程序会一直占用此文件的开着的句柄。为了添加彻底的垃圾清除功能,你必须在使用非托管资源的类当中实现IDisposable接口。
   在
 
本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 下一页>>
相关文章

IP Messenger 详细分析
可设置单元格颜色的ClistCtrl类
利用VC++开发ASP图像处理组件(二)
从 ADO 迁移到 ADO.NET(一)
获得 Win32 窗口句柄的更好的方法
关于 IDispatch 接口的 LPDispatch 属性的实
用ATL开发复合控件
后缀表达式求值及校验
浅谈PDFlib中文输出(四)PDFlib 接收的几种
事件编程(二)
毫秒定时器
类似于FlashGet的悬浮框的制作
不重起Windows直接更改IP地址
MFC程序员的WTL指南: 中文版序言
COM 组件设计与应用(五)——用 ATL 写第一
编写多文档应用程序
PhotoShop插件开发之选区(Selection)
VC初学者入门系列之二:消息循环
定制调试诊断工具和实用程序——摆脱DLL“地
WMI 的一个实现

相关评论


本文章所属分类:首页 VC++

  热门关键字: