2013-05-15 46 views
3

在C#中使用Excel進行Excel編程時(使用Excel 14.0庫),有幾個名稱相同的接口,但名稱前面有一個下劃線。例如:C#中Excel接口名稱前的下劃線字符的含義是什麼?

_Workbook 
Workbook 

_Worksheet 
Worksheet 

_Application 
Application 

etc 

這是什麼原因,下劃線表示什麼?我看到的大多數示例代碼都是調用具有下劃線的接口名稱。

+3

聽說Jon Skeet?即使他不知道(http://stackoverflow.com/questions/1051464/excel-interop-worksheet-or-worksheet)。投票結束.. – nawfal

+0

這是無稽之談。 –

回答

-2

在編程中,訪問器開始或結尾的下劃線通常表示私有的硬殼API。

+1

真的嗎? 「通常」? –

+0

它這種情況都是公共接口 –

6

看看MSDN。例如Workbook

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

所以Workbook與方法擴展_WorkbookWorkbookEvents_Event,這意味着許多事件處理程序被添加 - 僅此而已。

其餘接口是相似的。

3

這是OLE自動化中的一個老約定,它表示接口類型應該被程序員隱藏。通常在腳本語言和VB6和VBA等語言中,使用coclass上的默認接口而不是接口類型。

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進行交互),並且WorkbookEvents_Event將從IConnectionPoint :: GetConnectionInterface返回。反過來,要訂閱Workbook的「事件」(COM中的連接點),您需要將WorkbookEvents_Event的實現傳遞給IConnectionPoint :: Advise for Excel以在事件發生時調用。

由於它被轉換爲.NET,這些源接口在很大程度上失去了它們的含義併成爲實現細節。強類型的代表可以簡化一些事情,COM互操作可以自動化任何死記硬背的界面魔法。

在大多數情況下,僅使用Office interop(Workbook)的coclass接口就足以與.NET模型最接近。注意,但是,我已經看到其他供應商推薦使用實際的包裝器(例如,WorkbookClass)而不是生成的接口(Workbook)用於將來的版本控制。說實話,我(幸好)從來都不必考慮任何一種方式的後果。

呵呵,下劃線主要是一個約定和一個方便的方式來生成給定類名稱的COM接口名稱。 VB6將爲具有該約定的類創建COM接口(例如,如果您有一個名爲Workbook的類,它將導出COM接口_Workbook),因爲它是無效的VB6名稱。一般來說,前導下劃線是一個無效標識符(VB6)或保留(C++),因此可以使用方便的自動生成名稱。

相關問題