zoukankan      html  css  js  c++  java
  • .NET Framework 4新特性之 Type Equivalence(等价类型)

    这是新版本.NET Framework的一个重要特性,微软官方的介绍,请参考这里 http://msdn.microsoft.com/en-us/library/dd997297.aspx

    那么,到底如何理解并使用这个功能呢?

    为什么需要这个功能?

    这个功能,主要是解决COM interop的问题的。举个最常见的例子,如果我们需要在.NET程序里面调用Office组件,以前的情况是(以Excel为例)

    1.我们在开发的时候,需要选择一个有关的Excel版本的PIA(Primary Interop Assembly),这是有版本的

    2.发布的时候,需要确认目标机器是否有一样的版本的Excel

    安装和部署Office PIA不是一个太简单的事情,完整的介绍,请参考 http://www.microsoft.com/china/msdn/library/office/office/BusinessApps0608.mspx?mfr=true

    这里的最大问题就是,如何确保开发环境与实际使用环境的Office版本一样。事实上,你无法确保这一点。

    等价类型的意思就是,将当前程序中所用到的有限的那些COM类型,导入到当前程序集中,并且生成等价的.NET类型,如此一来,就可以不再依赖PIA,而可以方便地部署了。

    如何使用该功能?

    使用该功能其实很简单。你可能在不知不觉中已经在使用了。

    1.首先还是要添加引用

    image

    2.添加完之后,可以看到这个程序集的属性

    image

    这里有一个特殊的属性,叫Embed Interop Types,设置为true即可(针对PIA,默认就是true)

    3. 编写如下代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Microsoft.Office.Interop.Excel;
    
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                var app = new Application();
    
                app.Visible = true;
    
                Console.Read();
            }
        }
    
    
    }
    

    我们这里实现的功能很简单,只是启动了一个Excel的实例而已。

    4. 运行调试

    一个新的Excel程序窗口被打开了。

    那么,究竟发生了什么呢?既然说是等价类型,会将我们用到的COM类型导入,如何理解呢?

    image

    我们看到,在程序集里面,实际上多出来一个特殊的命名空间(Microsoft.Office.Interop.Excel),然后它下面只包含当前我们的代码所必须访问的那些类型(实际上是导入过的),从这一点上看,Visual Studio是一个很智能的工具。

    而且更加有意思的是,我们在Main方法中的代码,其实最终会被转换成下面这样

    private static void Main(string[] args)
    {
        Application application = (Application)Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("00024500-0000-0000-C000-000000000046")));
        application.Visible = true;
        Console.Read();
    }
    

    image

  • 相关阅读:
    详解jQuery的$符号和init函数
    myeclipse 快捷键,从步骤开始的大括号定位到匹配方法结束的大括号
    为Jquery类和Jquery对象扩展方法
    JQuery 对象和事件
    jquery,禁止冒泡和默认行为
    什么是项目发布
    IP转换成域名
    nslookup域名查询命令查询ip
    Java中的逆变与协变
    iOS 图片背景模糊效果
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/2050333.html
Copyright © 2011-2022 走看看