天天看点

.NET Framework 4新特性之 Type Equivalence(等价类型)

为什么需要这个功能?

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

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

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

如何使用该功能?

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

 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类型导入,如何理解呢?​

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

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();
}