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

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

_Workbook Workbook _Worksheet Worksheet _Application Application etc 

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

看看MSDN。 例如工作簿是

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

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

其余的接口是相似的。

在OLE自动化中这是一个古老的惯例,它表明接口types应该被程序员隐藏起来。 通常在VB6和VBA等脚本语言和语言中,使用coclass上的默认接口而不是接口types。

为了扩大Garath关于Workbook是_Workbook和WorkbookEvents_Event的组合的观察 。

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

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

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

当它被转换为.NET时,这些源接口在很大程度上失去了它们的意义,并成为一个实现细节。 强types的代表可以简化一些事情,COM互操作可以自动化任何死记硬背的界面魔法。

在大多数情况下,只需使用Office interop(Workbook)的coclass接口就足够了,并且最接近.NET模型。 注意,但是,我已经看到其他供应商推荐使用实际的包装器(例如,WorkbookClass)而不是生成的接口(Workbook)用于将来的版本控制。 说实话,我(幸好)从来都不必考虑任何一方面的后果。

呵呵,下划线主要是一个约定和一个方便的方式来生成一个给定类名的COM接口名称。 VB6将创build具有该约定的类的COM接口(例如,如果您有一个名为Workbook的类,它将导出一个COM接口_Workbook),因为它是一个无效的VB6名称。 一般来说,前导下划线是无效标识符(VB6)或保留(C ++),所以它使得方便的自动生成的名称。

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