(3)COM API访问
命名和可选参数与dynamic和其他增强一起使得访问COM API更加方便。例如在C#3.0或更早的版本中在调用某些COM API时,如果要省略某些参数需要使用Type.Missing,例如以下代码(代码系摘抄):
var myFormat =
Microsoft.Office.Interop.Excel.XlRangeAutoFormat.xlRangeAutoFormatAccounting1;
excelApp.get_Range("A1", "B4").AutoFormat(myFormat, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
但是有了命名和可选参数后,可以很简单的写成这样:
2. 类型等价支持(Type Equivalence Support)
如果嵌入来自于强命名托管程序集的类型信息时,可以使在某一应用程序中的类型与独立的发布版本中类型保持松散的连接。这意味着应用程序可以在不需要重新编译每一个版本的情况下使用多个版本托管类库中的类型。
类型嵌入经常用于COM交互,例如使用Microsoft Office中的自动化的应用程序。嵌入类型信息允许同一个应用程序在安装了不同的Office版本的机器上运行。而且开发人员可以在完全托管解决方案中使用类型嵌入。
来自于某个程序中可以嵌入的类型需要满足以下条件:
该程序集至少暴露一个公共接口。
该嵌入接口使用ComImport和Guid特性声明
该程序集使用ImportedFromTypeLib和一个程序集级别的Guid特性标注(默认情况下Visual Basic和Visual C#模版已包含了程序集的Guid特性)。
在指定可以嵌入的公共接口后,可以创建实现了这些接口的类。客户端程序可以在设计时引用包含了这些公共接口的程序何并且默认Embed Interop Types属性为true以嵌入类型信息(在命令行使用/link编译开关可以达到相同的效果),接下来客户端可以创建这些接口的实例。如果您创建了强命名运行时程序集的新版本,客户端不需要使用新的程序集重新编译,相反,客户端程序通过公共接口的嵌入类型信息继续使用可用的程序集的版本
(1)首先创建一个强命名接口类库(根据满足条件设置属性)
[Guid("8DA56996-A151-4136-B474-32784559F6DF")]
public interface ISampleInterface
{
void GetUserInput();
string UserInput { get; }
}