2013-09-05 119 views
0

我已经创建了两个接口I1I2。我已经将这两个接口继承到了抽象类。
的接口I1I2有同样的方法的Add(),如何使用显式接口派生类实现这一点?一个继承接口的抽象类,如何实现显式接口?

代码段

using System; 

interface I1 
{ 
    void Add(int _fn, int _sn); 
    void Prod(int _fn, int _sn); 
    void Sub(int _fn, int _sn); 
} 

interface I2 
{ 
    void Add(int _fn, int _sn); 
} 

abstract class Simple: I2, I1 
{ 
    public abstract void Add(int _fn, int _sn); 
    public abstract void Prod(int _fn, int _sn); 
    public abstract void Sub(int _fn, int _sn); 
    void I2.Add(int _fn, int _sn); 
} 


class Program : Simple 
{ 
    public override void Add(int _fn, int _sn) 
    { 
     Console.WriteLine(_fn+_sn); 
    } 

    public override void Prod(int _fn, int _sn) 
    { 
     Console.WriteLine(_fn * _sn); 
    } 

    public override void Sub(int _fn, int _sn) 
    { 
     Console.WriteLine(_fn - _sn); 
    } 

    void Add(int _fn, int _sn) 
    { 
     Console.WriteLine(_fn % _sn); 
    } 

    static void Main() 
    { 
     I1 inter = new Program(); 

     inter.Add(2, 3); 
     inter.Prod(2, 4); 
     inter.Sub(3,5); 
    } 
} 

我得到错误

Type 'Program' already defines a member called 'Add' with the same parameter types 

谁能帮我这。提前致谢。

+0

没有使用*两个*添加任何点()方法,即做同样的事情。抽象的Simple.Add()已经实现了I1.Add和I2.Add。所以只需摆脱显式接口实现和不需要的Program.Add()。并写出适当的代码,抽象的方法不能有一个正文。 –

+0

我编辑了我的代码,以便更好地了解我想要的内容。 – arun

+0

如果您将body添加到抽象Simple类中,代码编译正常。没有你提供的错误。 – BartoszKP

回答

0

使用一个抽象方法有不同的名称:

abstract class Simple: I2, I1 
{ 
    public abstract void Add(int _fn, int _sn); 
    public abstract void Prod(int _fn, int _sn); 
    public abstract void Sub(int _fn, int _sn); 
    void I2.Add(int _fn, int _sn) 
    { 
     AddInternal(_fn, _sn); 
    } 

    protected abstract void AddInternal(int _fn, int _sn); 
} 

而在具体的类中重写它:

protected override void AddInternal(int _fn, int _sn) 
{ 
    Console.WriteLine(_fn + _sn); 
} 
+0

AddInternal的实现在哪里?它只是不需要。 –

+0

@arun,是的,我修好了 –

+0

@arun,这对我有效:https://gist.github.com/thomaslevesque/735f852c2a396bd7a639 –