多态、抽象和接口

本文关键字:接口 抽象 多态 | 更新日期: 2023-09-27 18:11:14

此代码编译无错误

 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是哪个(不像这种显式命名的解决方案)。

谢谢。

多态、抽象和接口

被重写的方法正在被调用。为了使用接口中的方法,你必须在…

这一行做一些事情。
((IB).getName(s));

必须显式调用这些方法。

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

在您的代码中,类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
    }
}

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

我猜你的类CA,实现了所有3个接口和抽象方法,在CA中被覆盖,因为它满足了你的类CA所需的所有实现,它不会抛出任何错误。