【问题标题】:What is the meaning of the underscore character in front of an Excel interface name in C#? [duplicate]C#中Excel接口名称前的下划线字符是什么意思? [复制]
【发布时间】:2013-05-15 19:05:33
【问题描述】:

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

_Workbook
Workbook

_Worksheet
Worksheet

_Application
Application

etc

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

【问题讨论】:

  • 听说过 Jon Skeet?即使他没有know。投票结束..

标签: c# excel interface


【解决方案1】:

看看 MSDN。比如Workbook就是

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

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

其余接口类似。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      为了扩展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 交互的方式)的调用返回,而 WorkbookEvents_Event 将从 IConnectionPoint::GetConnectionInterface 返回。反过来,要订阅 Workbook 的“事件”(COM 中的连接点),您需要将 WorkbookEvents_Event 的实现传递给 IConnectionPoint::Advise 以便 Excel 在事件发生时调用。

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 这种情况下都是公共接口
        猜你喜欢
        • 2012-10-23
        • 1970-01-01
        • 2011-09-03
        • 2011-03-20
        • 2012-09-29
        • 2013-10-13
        • 1970-01-01
        相关资源
        最近更新 更多