基于C#的接口基礎(chǔ)教程之六_.Net教程
推薦:基于C#的接口基礎(chǔ)教程之五 第五節(jié)、實(shí)現(xiàn)接口 1、顯式實(shí)現(xiàn)接口成員 為了實(shí)現(xiàn)接口,類可以定義顯式接口成員執(zhí)行體(Explicit interface member implementations)。顯式接口成員執(zhí)行體可以是一個方法、一個
第六節(jié)、接口轉(zhuǎn)換
C#中不僅支持.Net 平臺,而且支持COM平臺。為了支持 COM和.Net,C# 包含一種稱為屬性的獨(dú)特語言特性。一個屬性實(shí)際上就是一個 C# 類,它通過修飾源代碼來提供元信息。屬性使 C# 能夠支持特定的技術(shù),如 COM 和 .Net,而不會干擾語言規(guī)范本身。C# 提供將COM接口轉(zhuǎn)換為 C#接口的屬性類。另一些屬性類將 COM類轉(zhuǎn)換為C# 類。執(zhí)行這些轉(zhuǎn)換不需要任何 IDL 或類工廠。
現(xiàn)在部署的任何COM 組件都可以在接口轉(zhuǎn)換中使用。通常情況下,所需的調(diào)整是完全自動進(jìn)行的。
特別是,可以使用運(yùn)行時可調(diào)用包裝 (RCW) 從 .NET 框架訪問 COM 組件。此包裝將 COM 組件提供的 COM 接口轉(zhuǎn)換為與 .NET 框架兼容的接口。對于 OLE 自動化接口,RCW 可以從類型庫中自動生成;對于非 OLE 自動化接口,開發(fā)人員可以編寫自定義 RCW,手動將 COM 接口提供的類型映射為與 .NET 框架兼容的類型。
使用ComImport引用COM組件
COM Interop 提供對現(xiàn)有 COM 組件的訪問,而不需要修改原始組件。使用ComImport引用COM組件常包括下面 幾個方面的問題:
1、創(chuàng)建 COM 對象。
2、確定 COM 接口是否由對象實(shí)現(xiàn)。
3、調(diào)用 COM 接口上的方法。
4、實(shí)現(xiàn)可由 COM 客戶端調(diào)用的對象和接口。
創(chuàng)建 COM 類包裝
要使 C# 代碼引用COM 對象和接口,需要在 C# 中包含 COM 接口的定義。完成此操作的最簡單方法是使用 TlbImp.exe(類型庫導(dǎo)入程序),它是一個包括在 .NET 框架 SDK 中的命令行工具。TlbImp 將 COM 類型庫轉(zhuǎn)換為 .NET 框架元數(shù)據(jù),從而有效地創(chuàng)建一個可以從任何托管語言調(diào)用的托管包裝。用 TlbImp 創(chuàng)建的 .NET 框架元數(shù)據(jù)可以通過 /R 編譯器選項(xiàng)包括在 C# 內(nèi)部版本中。如果使用 Visual Studio 開發(fā)環(huán)境,則只需添加對 COM 類型庫的引用,將為您自動完成此轉(zhuǎn)換。
TlbImp 執(zhí)行下列轉(zhuǎn)換:
1、COM coclass 轉(zhuǎn)換為具有無參數(shù)構(gòu)造函數(shù)的 C# 類。
2、COM 結(jié)構(gòu)轉(zhuǎn)換為具有公共字段的 C# 結(jié)構(gòu)。
檢查 TlbImp 輸出的一種很好的方法是運(yùn)行 .NET 框架 SDK 命令行工具 Ildasm.exe(Microsoft 中間語言反匯編程序)來查看轉(zhuǎn)換結(jié)果。
雖然 TlbImp 是將 COM 定義轉(zhuǎn)換為 C# 的首選方法,但也不是任何時候都可以使用它(例如,在沒有 COM 定義的類型庫時或者 TlbImp 無法處理類型庫中的定義時,就不能使用該方法)。在這些情況下,另一種方法是使用 C# 屬性在 C# 源代碼中手動定義 COM 定義。創(chuàng)建 C# 源映射后,只需編譯 C# 源代碼就可產(chǎn)生托管包裝。
執(zhí)行 COM 映射需要理解的主要屬性包括:
1、ComImport:它將類標(biāo)記為在外部實(shí)現(xiàn)的 COM 類。
2、Guid:它用于為類或接口指定通用唯一標(biāo)識符 (UUID)。
3、InterfaceType,它指定接口是從 IUnknown 還是從 IDispatch 派生。
4、PreserveSig,它指定是否應(yīng)將本機(jī)返回值從 HRESULT 轉(zhuǎn)換為 .NET 框架異常。
聲明 COM coclass
COM coclass 在 C# 中表示為類。這些類必須具有與其關(guān)聯(lián)的 ComImport 屬性。下列限制適用于這些類:
1、類不能從任何其他類繼承。
2、類不能實(shí)現(xiàn)任何接口。
4、類還必須具有為其設(shè)置全局唯一標(biāo)識符 (GUID) 的 Guid 屬性。
以下示例在 C# 中聲明一個 coclass:
// 聲明一個COM類 FilgraphManager
[ComImport, Guid("E436EBB3-524F-11CE-9F53-0020AF0BA770")]
class FilgraphManager
{ }
C# 編譯器將添加一個無參數(shù)構(gòu)造函數(shù),可以調(diào)用此構(gòu)造函數(shù)來創(chuàng)建 COM coclass 的實(shí)例。
分享:基于C#的接口基礎(chǔ)教程之四 第四節(jié)、訪問接口 對接口成員的訪問 對接口方法的調(diào)用和采用索引指示器訪問的規(guī)則與類中的情況也是相同的。如果底層成員的命名與繼承而來的高層成員一致,那么底層成員將覆蓋同
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實(shí)現(xiàn)分頁示例代碼
- 相關(guān)鏈接:
- 教程說明:
.Net教程-基于C#的接口基礎(chǔ)教程之六
。