2013-11-04 126 views
-1

我尝试了以下工作得很好:抽象类继承另一个抽象类和实现一个接口,都具有相同的方法签名

interface ICalculator 
{ 
    int CalculateSum(int x, int y); 
    int CalculateProduct(int x, int y); 
} 

abstract class AbstractCalculator : ICalculator 
{ 
    public abstract int CalculateSum(int x, int y); 
    public int CalculateProduct(int x, int y) 
    { 
     return x * y; 
    } 
} 

卜尝试了这一点:没有工作:

interface ISum 
{ 
    int Sum (int x, int y); 
} 

abstract class AbsSum1 
{ 
    public abstract int Sum (int x, int y); 
} 

abstract class AbsSum2 : AbsSum1, ISum 
{ 
    public abstract int AbsSum1.Sum (int x, int y); 
    public abstract int ISum.Sum (int x, int y); 
    public abstract int Sum (int x, int y);  
} 

任何人都可以帮助我吗? 我只是测试它是否有可能在c#中完成。我想要一个类从AbsSum2派生并实现所有三个方法。

+1

这是你的意图有总和()方法的三种不同的实现? – alexm

+2

你想达到什么目的? – Dennis

+0

你为什么要这样做?你为什么试图构建过于复杂,难以阅读和使用的代码?做一个好的程序员:给每个方法一个合适的名称,说明它的作用,而不是试图欺骗编译器让你有三个同名的方法。 –

回答

0

我怀疑魔鬼在细节,但让你的例子来编译,你AbsSum2类只需要override总和(从AbsSum

abstract class AbsSum2 : AbsSum1, ISum 
{ 
    public override int Sum(int x, int y) 
    { 
     return x + y; 
    } 
} 
0

当你实现一个接口,你很可能有两个选项

1)实施含蓄:

abstract class AbsSum2 : AbsSum1, ISum 
{ 
    // Since the base class already has a **public** Sum() method with proper signature 
    // ISum will use the method declared in the base class. 
} 

2)这样做明确:

abstract class AbsSum2 : AbsSum1, ISum 
{ 
    // Manually redirect interface to Sum() method declared in the base class. 

int ISum.Sum(int x, int y) 
{ 
    return this.Sum(x, y); 
} 

}

相关问题