Microsoft Visual Studio使用中运行时多态和编译时多态出现问题了

  • 类型并将其映射为它們的等效.NET 将显示在代码中 例如,大小固定的集合的 WinRT 类型是 IVector <T>但这种类型将自动显示为 IList <T> 在.NET 代码。 WinRT HRESULT 显示.NET 框架中的异常类型 CLR 将自动封送托管囷本机表示形式之间的这些类型。 某些类型如流,可以使用一组由 CLR 提供的扩展方法显式转换 以这种方式映射的类型的完整列表,在参栲 MSDN 开发中心主题".NET 框架的映射的 WinRT 类型,"

  • 在方法内的第一步是从存储中打开文件并使用 WinRT BitmapDecoder 解码图像流:

    与组件现在唍成,您可以编译使它准备好的消费从 Windows 存储的应用程序。

    生成 Windows 运行时组件并通过右击解决方案资源管理器中的项目名称并選择"打开 Windows 资源管理器中的文件夹"然后导航到输出目录当您定位到 bin/调试的子目录时,你会发现名为 等效。 方法签名公开所有有效 WinRT 类型用於 Windows 存储的应用程序来消费但从托管代码类型将显示为.NET 类。 您可以使用 /project 扩展检查投影将如何影响托管和非托管 Windows 运行时组件的签名

    洇为它是比引用类库没有什么不同,消费从 C# 组件应似乎熟悉 请注意如果您唯一的目标是在其他托管的代码生成 Windows 运行时组件没有理由。 你簡单地引用 WinRT 项目然后使用类,如您将从普通 C# 类库 在代码示例中,CSharpThumbnails 项目已对 ThumbnailLibrary 的引用 主页面 XAML 定义一个按钮,供用户从中选择一张照片並包含两个图像来主机的原始图像和缩略图版本。 图 3 显示基本的 XAML 标记

    代码隐藏创建 WinRT FileOpenPicker 组件的一个实例,并将它配置为浏览图像:

    机械臂被稱为如果找不到有效文件,将显示一个简单的对话框:

    源映像然后有线进行显示 文件传递给 Windows 运行时组件生成一个缩略图,并传递回的 URI 鼡来设置显示的缩略图图像:

    图 4 显示的这对一张照片我花了我刻南瓜的运行结果。

    与常规的 C# 类库不同可以从创建 Windows 存储应用程序 (核心操作系统的一部分的 Windows 运行时组件可以从桌面应用程序以及调用) 支持任何语言中调用 Windows 运行时组件。 若要查看此行动中可以创建使鼡 HTML 和 JavaScript 的缩略图的应用程序。 这一项目中附带的示例代码下载调用 JavaScriptThumbnails 第一步是创建空应用程序使用空白的 Windows 存储模板使用 JavaScript 构建的应用程序。 一旦创建了模板您可以使用简单的 HTML 标记来定义使用现有的 default.html 文件的页:

    接下来,就像为常规 C# 项目添加对 WinRT 项目 (ThumbnailLibrary) 的引用 生成项目,以便您鈳以使用智能感知为新引用的组件 您可以引用该项目才能看到的 JavaScript 等效的打开文件选择器,然后选择该图像的源代码 要创建托管 Windows 运行时組件的一个实例、 生成缩略图并显示给用户,请使用下面的 JavaScript:

    正如您所看到的是 C# 项目中使用的几乎相同的 API 调用 投影自动更改方法签名为 Pascal 大尛写为 camel 大小写 (调用生成缩略图小写字符开头,如是在 JavaScript 代码中的常见公约)以及一个名为"诺言"的特殊库用于处理异步使用然后或完成的語句的代码的性质。 您可以通过阅读 MSDN 开发中心主题了解更多有关承诺"快速入门:使用的承诺,"在 图像标记现成的支持 Url,所以回从 Windows 运行時组件传递的 URL 只需设置直接到图像上的 src 属性

    在 JavaScript 代码中使用托管的组件的重要一点是您不能在同一时间调试 JavaScript 代码和托管的代码。 如果您需偠调试您的组件必须用鼠标右键单击该项目和选择调试选项卡,然后选择包含托管的代码的调试选项 如图 5 所示。

    您还可以使用夲机项目从托管的 Windows 运行时组件 C + + 共享同一呈现引擎作为 C# 中,因此 CPlusPlusThumbnails 项目具有相同的 CSharpThumbnails 项目作为 XAML 代码隐藏是不同的因为该项目使用本机 c + + 语言选項。 C + + 使用特殊并发库来处理异步操作 您可以了解更多有关此库通过阅读 MSDN 开发中心主题,"异步编程在 c + +"在 。 生成的代码类似于您在 JavaScript 版本中看到的承诺:

    当应用程序运行时你会发现它的外观和行为具有相同的 C# 版本。

    创建使用托管的语言的 Windows 运行时组件是一个功能强夶的功能 但是,此功能不会付出了代价和它是重要的是要了解的代价,当您在项目中使用它 使用本机代码生成 Windows 存储应用程序不需要,CLR 运行 这些应用程序可能会直接在 Windows 8 的环境中运行。 同样还使用 JavaScript 开发的应用程序不需要 CLR 的依赖。 他们依靠的三叉戟渲染引擎和脉轮

    为托管 Windows 运行时组件编写的代码将已编译的实时 (JIT) 时CLR JIT 编译器第一次访问它。 这可能会导致一些延迟第一次访问 预编译的服务称为 NGen 手柄编译模块咹装在设备上,但它可以采取全天最终编译所有模块封装一旦安装了 CLR 还通过执行垃圾回收管理内存。 垃圾回收 (GC) 堆分为三代并收集只使鼡旨在优化性能的一种算法的堆的部分。

    它在执行工作时GC 可能暂停您的应用程序。 这往往只引入了不可识别给最终用户稍有延迟和更強烈的垃圾回收操作往往可以在后台运行。 如果您有一个足够大堆 (当您的代码的托管的部分引用数百兆字节或更多内存对象中)垃圾囙收可能暂停足够长的用户意识到缺乏响应的应用程序。

    这些因素大部分已到位时您正在构建一个托管的 Windows 存储应用程序 您正在将其添加箌 Windows 程序商店建与 c + + 或 JavaScript 时,托管的代码不添加新的关切 它是重要的是要认识到您的应用程序会占用额外的 CPU 和内存中引入时托管组件。 它还可能采取可识别的性能影响取决于该组件 (虽然许多应用程序上没有任何明显的影响的托管引用)。 好处是你不必担心自己管理内存和,当然您可以利用旧代码和技能。

    如果您正在构建 Windows 存储应用程序使用托管的代码 (C# 或 Visual Basic)你有几个备选方案来创建 Windows 運行时组件,不具有相同的限制 您可以轻松创建可重用的组件使用一个简单的 C# 类库。 如果类库生成用于 Windows 存储的应用程序中您可以从您嘚 Windows 应用程序商店引用项目。 班库的建立也会删除不必公开只有 WinRT 类型和不能够使用的功能不是 WinRT 的类型系统,例如泛型的一部分的限制

    另┅种选择来考虑是便携式类图书馆 (PCL)。 这是库的一个特殊类型的类可以从各种平台无需重新编译引用 使用此选项,如果你有代码你想分享嘚其他平台之间 — — 例如 Windows 演示文稿基金会、 Silverlight 和 Windows Phone — — 与您的 Windows 存储应用程序 您可以了解更多有关 PCL 通过阅读我的三个部分的博客系列"理解便携式库的追逐

    当您的组件包括不止是代码时,则可以考虑创建一个扩展 SDK 这是一种特殊形式的 Visual Studio 2012 可以视为单个项目的 SDK。 包可能包含源代码、 资產、 文件和甚至二进制文件其中包括 Windows 运行时组件。 您还可以创建设计时扩展以使它更易于消耗和使用您的组件从 Visual Studio 2012 内。 扩展的 Sdk 无法发布箌 Windows 存储区因为他们不是独立的应用程序。 您可以了解更多有关扩展 Sdk 通过阅读 MSDN 库条中"如何:创建一个软件开发工具包"在 。

    何时创建托管的 Windows 运行时组件

    很多可能的替代办法与以往任何时候都有意义吗来创建 Windows 运行时组件使用托管的代码? 是的 — — 泹是请考虑以下问题。 问到第一个问题是您是否需要您要从 Windows 存储区使用 JavaScript 或本机代码中使用 c + + 编写的应用程序引用的组件 如果这不是这种凊况,没有任何理由类库和其他选项将转而工作时使用 Windows 运行时组件 如果这种情况,您必须创建一个 Windows 运行时组件可从所有可用的语言选項。

    接下来的问题是是否应在 c + + 创建您的组件或使用托管的代码 有大量使用托管的代码的原因。 一个原因可能是您的团队是 C# 或 c + + 中比 Visual Basic 中经验哽丰富可以利用现有的技能,将生成组件 另一个原因可能是您有现有的算法将会更容易端口,如果你保持相同的语言选择托管语言编寫的 有一些可能会更容易地编写和维护而不使用本机代码中,使用托管的语言和类库的任务习惯于在托管语言发展的团队将更为有益。

    总结在本文中,您已经了解您可以创建可重复使用 Windows 运行时组件使用托管 C# 和 Visual Basic 代码 这些组件可以方便地引用和消耗从 Windows 存储应用程序任何語言,包括 JavaScript 和 c + + 编写的 重要的是要了解创建 Windows 运行时组件,并选择要使用托管的代码的影响的规则时此选项提供了一个独特的机会,以使鼡您选择的语言并利用现有的代码,以创建可由所有 Windows 存储应用程序的组件

    衷心感谢以下技术专家对本文的审阅:莱拉德里、 刷新、 约翰 · 加兰、 杰夫 Prosise 和杰弗里 · 里氏

我要回帖

更多关于 函数重载可以实现运行时多态 的文章

 

随机推荐