zoukankan      html  css  js  c++  java
  • C#中的多重继承

    经常,一个类会实现多个接口,比如用户的一个控件继承自"IEdit"和"ICombo",每个接口无疑都有一个Paint方法来供子类实现如何画他们,但是多重继承就会出现问题,默认情况下,C#止允许实现Paint方法。
    现在有一个比较钻牛角尖的问题,如何在派生的类里面实现这两个接口的相同名称的方法呢?
    通过试验,翻阅MSDN,我总结了这么几条规律:
    本文可参考 MSDN 配合理解
    1。要么只实现一个方法,否则函数重明,就会存在二义性
    2。如果确实想两个方法都实现,必须在接口的实现部分注意这么几点:
    (1)。对有相同名称的方法在实现时,前面不能加public等关键词。每个方法前必须冠以相应的接口名。
    比如:void IFace1.Print(){......};
               void IFace2.Print(){......};
    (2)。对于不通名称的方法,事项是前面必须冠以"public"标识符。
    以上两个规则缺一不可,否则会收到编译错误。
    3。创建类实例时,如何饮用不通接口的相同方法呢?方法如下:
    1。如果调用那个接口的实现,则必须将示例强制转换为相应接口类型。
    比如:
    FacetoFace face;
    ((IFace1)face).Print();或者
    ((IFace2)face).Print();
    完整的例子见下面
    using System;
    namespace TestInterface
    {
     /// <summary>
     /// Class1 的摘要说明。
     /// 本代码演示了C#中接口的基本特征,并检验了作者心中迷惑但是书中没有详细讲解的地方,比如接口多重
     /// 继承时,多个父类接口有相同的方法时,派生接口如何定义、使用的问题
     /// </summary>
     interface IFace1
     {
      void Print();
      void Hello();
     }
     interface IFace2
     {
      void Print();
      void Goodbye();
     }
     class FacetoFace : IFace1,IFace2
     {
      #region IFace1 成员
      void IFace1.Print()
      {
       Console.WriteLine("这是IFace1的Print函数");
      }
      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.Print()
      {
       Console.WriteLine("这是IFace2的Print函数");
      }
      #endregion
     }
     class Class1
     {
      /// <summary>
      /// 应用程序的主入口点。
      /// </summary>
      [STAThread]
      static void Main(string[] args)
      {
       //
       // TODO: 在此处添加代码以启动应用程序
       FacetoFace facetest1=new FacetoFace();
       ((IFace1)facetest1).Print();
       ((IFace2)facetest1).Print();
       facetest1.Hello();
       facetest1.Goodbye();
       //
      }
     }
    }
  • 相关阅读:
    PAT (Advanced Level) 1080. Graduate Admission (30)
    PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)
    PAT (Advanced Level) 1078. Hashing (25)
    PAT (Advanced Level) 1077. Kuchiguse (20)
    PAT (Advanced Level) 1076. Forwards on Weibo (30)
    PAT (Advanced Level) 1075. PAT Judge (25)
    PAT (Advanced Level) 1074. Reversing Linked List (25)
    PAT (Advanced Level) 1073. Scientific Notation (20)
    PAT (Advanced Level) 1072. Gas Station (30)
    PAT (Advanced Level) 1071. Speech Patterns (25)
  • 原文地址:https://www.cnblogs.com/jincwfly/p/726084.html
Copyright © 2011-2022 走看看