C#中Excel接口名称前面的下划线字符的含义是什么?

时间:2013-05-15 19:05:33

标签: c# excel interface

在C#中使用Excel 14.0编程Excel时,有几个接口具有相同的名称,但在名称前面有一个下划线。例如:

_Workbook
Workbook

_Worksheet
Worksheet

_Application
Application

etc

这背后的原因是什么以及下划线表示什么?我看到的大多数示例代码都在调用具有下划线的接口名称。

4 个答案:

答案 0 :(得分:6)

查看MSDN。例如Workbook

[GuidAttribute("000208DA-0000-0000-C000-000000000046")]
public interface Workbook : _Workbook, 
    WorkbookEvents_Event 

所以Workbook使用_Workbook中的方法扩展WorkbookEvents_Event,这意味着添加了许多事件处理程序 - 这就是全部。

其余界面类似。

答案 1 :(得分:3)

它是OLE自动化中的旧约定,它表示应该从程序员隐藏接口类型。在脚本语言和VB6和VBA等语言中很常见,您可以使用coclass上的默认接口而不是接口类型。

答案 2 :(得分:2)

扩展Garath's observation,即Workbook是_Workbook和WorkbookEvents_Event的组合。

基本上,_Workbook接口是Excel实现的,而WorkbookEvents_Event接口是它引发的事件。

在COM中,WorkbookEvents_Event是一个源接口,实际上定义了客户端的方法签名,以注册为事件接收器(也称为事件处理程序)。 Workbook接口是将它连接在一起的实际coclass(COM类) - 此类公开_Workbook方法,并且是WorkbookEvents_Event的源。

在COM中,_Workbook接口将从对IUnknown :: QueryInterface的调用返回(这是您与Excel交互的方式),并且将从IConnectionPoint :: GetConnectionInterface返回WorkbookEvents_Event。反过来,要订阅Workbook的“事件”(COM中的连接点),您可以将WorkbookEvents_Event的实现传递给IConnectionPoint :: Advise for Excel,以便在事件发生时进行调用。

当它被转换为.NET时,这些源接口很大程度上失去了意义并成为一个实现细节。强类型的委托简化了事情,COM interop自动化任何死记硬背界面魔法。

在大多数情况下,只使用Office interop(Workbook)的coclass接口就足够了,并且最接近.NET模型。但是,我已经看到其他供应商建议使用实际的包装器(例如,WorkbookClass)而不是生成的接口(工作簿)来进行未来的版本控制。说实话,我(幸运的是)从来没有考虑过任何一种方式的影响。

哦,下划线主要是一种约定,是一种在给定类名的情况下生成COM接口名称的简便方法。 VB6将为具有该约定的类创建COM接口(例如,如果您有一个名为Workbook的类,它将导出COM接口_Workbook),因为它是无效的VB6名称。通常,前导下划线是无效标识符(VB6)或保留(C ++),因此它可以生成方便的自动生成名称。

答案 3 :(得分:-2)

在编程中,访问者开头或结尾的下划线通常表示私有的,有壳的API。