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

本文关键字:字符 下划线 是什么 前面 Excel 接口 | 更新日期: 2023-09-27 18:13:39

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

_Workbook
Workbook
_Worksheet
Worksheet
_Application
Application
etc

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

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

看看MSDN。例如,工作簿是

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

所以Workbook用WorkbookEvents_Event的方法扩展_Workbook,这意味着添加了许多事件处理程序-仅此而已。

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

扩展Garath的观察,即Workbook是_Workbook和WorkbookEvents_Event的组合。

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

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

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

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

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

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

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