程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#中接口多重繼承的注意事項

C#中接口多重繼承的注意事項

編輯:關於C語言

經常,一個類會實現多個接口,比如用戶的一個控件繼承自"IEdit"和"ICombo",每個接口無疑都有一個Paint方法來供子類實現如何畫他們,但是多重繼承就會出現問題,默認情況下,C#止允許實現Paint方法.現在有一個比較鑽牛角尖的問題,如何在派生的類裡面實現這兩個接口的相同名稱的方法呢?

通過試驗,翻閱MSDN,我總結了這麼幾條規律:

本文可參考 MSDN 配合理解

1.要麼只實現一個方法,否則函數重明,就會存在二義性

2.如果確實想兩個方法都實現,必須在接口的實現部分注意這麼幾點:

( 1 ).對有相同名稱的方法在實現時,前面不能加public等關鍵詞.每個方法前必須冠以相應的接口名.比如:void IFace1.Pr

int( )
{
  ......
}
;
void IFace2.Pr
int( )
{
  ......
}
;

( 2 ).對於不通名稱的方法,事項是前面必須冠以"public"標識符.

以上兩個規則缺一不可,否則會收到編譯錯誤.

3.創建類實例時,如何飲用不通接口的相同方法呢?方法如下:1.如果調用那個接口的實現,則必須將示例強制轉換為相應接口類型.比如:FacetoFace face;

( ( IFace1 )face ).Pr

int( );

或者( ( IFace2 )face ).Pr

int( );

完整的例子見下面

using System;
namespace TestInterface
{
  /// <summary>
  /// Class1 的摘要說明.
  /// 本代碼演示了C#中接口的基本特征,並檢驗了作者心中迷惑但是書中沒有詳細講解的地方,比如接口多重
  /// 繼承時,多個父類接口有相同的方法時,派生接口如何定義、使用的問題
  /// </summary>
  interface IFace1
  {
    void Pr
    int( );
    void Hello( );
  }

  interface IFace2
  {
    void Pr
    int( );
    void Goodbye( );
  }
  class FacetoFace : IFace1,IFace2
  {
    #region IFace1 成員
    void IFace1.Pr
    int( )
    {
      Console.WriteLine( "這是IFace1的Pr
      int函數" );
    }

    public void Hello( )
    {
      // TODO: 添加 FacetoFace.Hello 實現
      Console.WriteLine( "IFace1向您說Hello!" );
    }
    #endregion
    #region IFace2 成員
    public void Goodbye( )
    {
      // TODO: 添加 FacetoFace.Goodbye 實現
      Console.WriteLine( "IFace2向您說GoodBye" );
    }
    void IFace2.Pr
    int( )
    {
      Console.WriteLine( "這是IFace2的Pr
      int函數" );
    }
    #endregion
  }
  class Class1
  {
    /// <summary>
    /// 應用程序的主入口點.
    /// </summary> [STAThread] static void Main(
    string[] args )
    {
      //
      // TODO: 在此處添加代碼以啟動應用程序
      FacetoFace facetest1=new FacetoFace( );
      ( ( IFace1 )facetest1 ).Pr
      int( );
      ( ( IFace2 )facetest1 ).Pr
      int( );
      facetest1.Hello( );
      facetest1.Goodbye( );
      // 
    }
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved