日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

基于C#的接口基礎教程之六(2)_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:基于C#的接口基礎教程之五
  第五節(jié)、實現(xiàn)接口   1、顯式實現(xiàn)接口成員   為了實現(xiàn)接口,類可以定義顯式接口成員執(zhí)行體(Explicit interface member implementations)。顯式接口成員執(zhí)行體可以是一個方法、一個

  創(chuàng)建 COM 對象

  COM coclass 在 C# 中表示為具有無參數(shù)構造函數(shù)的類。使用 new 運算符創(chuàng)建該類的實例等效于在 C# 中調用 CoCreateInstance。使用以上定義的類,就可以很容易地實例化此類:

class MainClass
{
public static void Main()
{
FilgraphManager filg = new FilgraphManager();
}
}
  聲明 COM 接口

  COM 接口在 C# 中表示為具有 ComImport 和 Guid 屬性的接口。它不能在其基接口列表中包含任何接口,而且必須按照方法在 COM 接口中出現(xiàn)的順序聲明接口成員函數(shù)。

  在 C# 中聲明的 COM 接口必須包含其基接口的所有成員的聲明,IUnknown 和 IDispatch 的成員除外(.NET 框架將自動添加這些成員)。從 IDispatch 派生的 COM 接口必須用 InterfaceType 屬性予以標記。
從 C# 代碼調用 COM 接口方法時,公共語言運行庫必須封送與 COM 對象之間傳遞的參數(shù)和返回值。對于每個 .NET 框架類型均有一個默認類型,公共語言運行庫將使用此默認類型在 COM 調用間進行封送處理時封送。例如,C# 字符串值的默認封送處理是封送到本機類型 LPTSTR(指向 TCHAR 字符緩沖區(qū)的指針)�?梢栽� COM 接口的 C# 聲明中使用 MarshalAs 屬性重寫默認封送處理。

  在 COM 中,返回成功或失敗的常用方法是返回一個 HRESULT,并在 MIDL 中有一個標記為"retval"、用于方法的實際返回值的 out 參數(shù)。在 C#(和 .NET 框架)中,指示已經發(fā)生錯誤的標準方法是引發(fā)異常。
默認情況下,.NET 框架為由其調用的 COM 接口方法在兩種異常處理類型之間提供自動映射。

  返回值更改為標記為 retval 的參數(shù)的簽名(如果方法沒有標記為 retval 的參數(shù),則為 void)。

  標記為 retval 的參數(shù)從方法的參數(shù)列表中剝離。

  任何非成功返回值都將導致引發(fā) System.COMException 異常。

  此示例顯示用 MIDL 聲明的 COM 接口以及用 C# 聲明的同一接口(注意這些方法使用 COM 錯誤處理方法)。

  下面是接口轉換的C#程序:

using System.Runtime.InteropServices;
// 聲明一個COM接口 IMediaControl
[Guid("56A868B1-0AD4-11CE-B03A-0020AF0BA770"),
InterfaceType(ComInterfaceType.InterfaceIsDual)]
interface IMediaControl // 這里不能列出任何基接口
{
void Run();
void Pause();
void Stop();
void GetState( [In] int msTimeout, [Out] out int pfs);
void RenderFile(
[In, MarshalAs(UnmanagedType.BStr)] string strFilename);
void AddSourceFilter(
[In, MarshalAs(UnmanagedType.BStr)] string strFilename,
[Out, MarshalAs(UnmanagedType.Interface)] out object ppUnk);
[return : MarshalAs(UnmanagedType.Interface)]
object FilterCollection();
[return : MarshalAs(UnmanagedType.Interface)]
object RegFilterCollection();
void StopWhenReady();
}

  若要防止 HRESULT 翻譯為 COMException,請在 C# 聲明中將 PreserveSig(true) 屬性附加到方法。
  下面是一個使用C# 映射媒體播放機COM 對象的程序。

分享:基于C#的接口基礎教程之四
  第四節(jié)、訪問接口   對接口成員的訪問   對接口方法的調用和采用索引指示器訪問的規(guī)則與類中的情況也是相同的。如果底層成員的命名與繼承而來的高層成員一致,那么底層成員將覆蓋同

來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
相關.Net教程