Windows Vista 和 Office: 使用托管预览处理程序框架以自己的方式查看数据
2009-02-09 17:43:48 来源:WEB开发网图 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 应当只是实例化并返回正确的控件类型),遵守此规则并不难。
更多精彩
赞助商链接