在C#中,Excel界面名称前面的下划线字符是什么意思?

在C#中,Excel界面名称前面的下划线字符是什么意思?,c#,excel,interface,C#,Excel,Interface,在C#(使用Excel 14.0库)中为Excel编程时,有几个接口具有相同的名称,但其中一个接口的名称前有下划线。例如: _Workbook Workbook _Worksheet Worksheet _Application Application etc 这背后的原因是什么?下划线意味着什么?我看到的大多数示例代码都在调用带有下划线的接口名称。在编程中,访问器开头或结尾的下划线通常表示私有的、易变的API。看看MSDN。例如 因此扩展了来自的方法,这意味着添加了许多事件处理程序——

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

_Workbook
Workbook

_Worksheet
Worksheet

_Application
Application

etc

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

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

看看MSDN。例如

因此扩展了来自的方法,这意味着添加了许多事件处理程序——仅此而已


rest接口是类似的。

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

要在该工作簿上展开,请结合使用“工作簿事件”和“工作簿事件”

基本上,_工作簿接口是Excel实现的,WorkbookEvents_事件接口是它引发的事件

在COM中,WorkbookEvents\u事件是一个源接口,实际上定义了客户端注册为事件接收器(也称为事件处理程序)的方法签名。工作簿接口是将其连接在一起的实际coclass(COM类)——该类公开了_工作簿方法,并且是WorkbookEvents _事件的源

在COM中,调用IUnknown::QueryInterface(这是您与Excel交互的方式)将返回_工作簿接口,而WorkbookEvents_事件将从IConnectionPoint::GetConnectionInterface返回。反过来,要订阅工作簿的“事件”(COM语言中的连接点),您需要将WorkbookEvents\u事件的实现传递给IConnectionPoint::Advise for Excel,以便在事件发生时调用

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

在大多数情况下,仅使用用于Office互操作(工作簿)的coclass接口就足够了,并且最接近.NET模型。注意,但是,我看到其他供应商建议在将来的版本控制中使用实际的包装器(例如WorkbookClass),而不是生成的接口(工作簿)。老实说,我(谢天谢地)从未想过这两种方式的后果


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

听说过Jon Skeet吗?连他都不知道。投票关闭。在这种情况下,两者都是公共接口
[GuidAttribute("000208DA-0000-0000-C000-000000000046")]
public interface Workbook : _Workbook, 
    WorkbookEvents_Event