【问题标题】:Polymorphism, abstract and interface多态、抽象和接口
【发布时间】:2014-08-23 15:37:18
【问题描述】:

这段代码编译没有错误

 class program
{
    interface IA
    {
       void getName(string s);
    }

    interface IB
    {
        void getName(string s);
    }

    interface IC
    {
        void getName(string s);
    }

   public  abstract class AC
    {
        public abstract void getName(string s);
   }

    public class CA : AC , IA, IB, IC
    {
  public override void getName(string s)
        {
            Console.WriteLine(s);
        }
    }

    static void Main()
    {
        CA ca = new CA();

        Console.ReadLine();
    }

}

实现了哪个getName 方法?如果我们有多个具有相同方法名称的接口,那么只实现一个满足所有接口的方法就足够了吗?如果他们做不同的事情呢?请注意,我没有指定存在哪个getName(与此explicit naming 的解决方案不同)。

谢谢大家。

【问题讨论】:

  • 该实现将用于满足所有三个接口中的功能。
  • @TrippKinetics 谢谢。如果我删除override,那么编译器会抱怨抽象方法中的getName 没有实现。所以这似乎是一个单向的事情。
  • @Zuzlx 在接口中声明的成员和在抽象类中声明的成员是不同的。为了满足接口,你必须实现一个方法,为了满足抽象类,你必须重写一个方法。而且因为你必须明确地说我的方法覆盖另一个你必须使用override修饰符。

标签: c# inheritance interface polymorphism abstract-class


【解决方案1】:

正在调用被覆盖的方法。为了使用接口中的方法,您必须执行以下操作...

((IB).getName(s));

您必须显式调用这些方法。

http://msdn.microsoft.com/en-us/library/ms173157.aspx

【讨论】:

    【解决方案2】:

    在您的代码中,CA 类中的方法 getName 实现了所有 3 个接口。如果它们具有不同的含义,则必须使用显式接口实现:

    public class CA : AC, IA, IB, IC
    {
        public override void getName(string s)
        {
            Console.WriteLine(s);
        }
    
        void IC.getName(string s)
        {
            // Your code
        }
    
        void IB.getName(string s)
        {
            // Your code
        }
    
        void IA.getName(string s)
        {
            // Your code
        }
    }
    

    【讨论】:

      【解决方案3】:

      该实现将用于满足所有三个接口中的功能。

      【讨论】:

        【解决方案4】:

        我猜你的CA类,实现了CA中重写的所有3个接口和抽象方法。因为它满足你的CA类所需的所有实现,它不会抛出任何错误。如果你需要调用接口,显式调用它们.

        【讨论】:

          猜你喜欢
          • 2017-02-19
          • 2011-07-26
          • 2014-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-22
          • 2011-01-06
          • 2016-09-27
          相关资源
          最近更新 更多