WEB开发网
开发学院操作系统Windows Vista Windows Vista 和 Office: 使用托管预览处理程序框... 阅读

Windows Vista 和 Office: 使用托管预览处理程序框架以自己的方式查看数据

 2009-02-09 17:43:48 来源:WEB开发网   
核心提示: 图 5Windows Vista 中的 XML 预览实现 PreviewHandler既然知道如何使用我的框架来实现托管预览处理程序,下面看一下 PreviewHandler 基类的细节,Windows Vista 和 Office: 使用托管预览处理程序框架以自己的方式查看数据(8),以

图 5Windows Vista 中的 XML 预览

实现 PreviewHandler

既然知道如何使用我的框架来实现托管预览处理程序,下面看一下 PreviewHandler 基类的细节,以便更好地理解预览处理程序的工作原理。

在本质上,PreviewHandler 只是私有成员变量 _previewControl 中存储的 Windows 窗体控件的容器。它针对从 GetPreviewHandlerControl 方法返回的控件进行初始化,该方法由自定义预览处理程序实现方法(例如,XmlPreviewHandlerControl 或 ZipPreviewHandlerControl)来实现:

protected PreviewHandler()
{
  _previewControl = CreatePreviewHandlerControl();
  IntPtr forceCreation = _previewControl.Handle;
}

虽然这是非常小的构造函数,但有几个细微问题值得指出。第一,我违反了一项重要的 .NET Framework 设计准则,该准则严格要求构造函数不应当调用虚拟方法(这将被 FxCop 规则 ConstructorsShouldNotCallBaseClassVirtualMethods 捕获)。与在 ISO C++ 中不同,在 .NET 中,虚拟调用的目标将是最派生的类型(重写),而不是当前构造的基础类型(虚拟)。这里的问题是,当基础类型的构造函数执行时,派生类型的构造函数尚未执行。这意味着,在完成派生实例的构造之前,该实例将调用方法重写,因此,违反了构造函数不应当调用尚未封装在相同类中的虚拟方法的规则。请记住这一点,因为它意味着对于依赖于在构造函数中设置的任意内容的 CreatePreviewHandlerControl 的重写来说,您不应当在其中做任何事情(因为该构造代码尚未运行)。但是,基于我已创建的框架(在其中,CreatePreviewHandlerControl 应当只是实例化并返回正确的控件类型),遵守此规则并不难。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:Windows Vista Office

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接