【问题标题】:Fully qualified interface name in inheritance [duplicate]继承中的完全限定接口名称[重复]
【发布时间】:2016-11-08 08:14:14
【问题描述】:

有2个接口定义为:

interface calc1
{
    int add(int a, int b);
}
interface calc2
{
    int add(int x, int y);
}

一个类实现了这两个接口:

class Calculation : calc1, calc2
{
    public int result1;
    public virtual int add(int a, int b)
    {
        return result1 = a + b;
    }        
}

一切正常。但是当我将类定义更改为:

class Calculation : calc1, calc2
{
    public int result1;
    public int result2;
    public virtual int calc1.add(int a, int b)
    {
        return result1 = a + b;
    }

    public int calc2.add(int x, int y)
    {
        return result2 = x - y;
    }
}

我看到错误:

The modifier 'virtual' is not valid for this item

The modifier 'public' is not valid for this item

后面的类代码有什么问题?

【问题讨论】:

  • 为什么需要方法为virtual?您打算从Calculation 继承吗?你只需要这两种方法中的一种是虚拟的吗?
  • 是的。由于我无法发布原始代码,因此我在此处发布之前已对其进行了更改。我只希望这两种方法之一是虚拟的,因为我将在派生类中覆盖它。
  • 您可以将第一个设为隐式实现 (public virtual int add(int a, int b)),将第二个设为显式实现 (int calc2.add(int x, int y))
  • 谢谢!它奏效了。

标签: c#


【解决方案1】:

显式接口实现不能有访问修饰符,因为它们只有在将接口用作类型时才可见。将其设为public 毫无意义。

此外,您不能从显式接口实现派生,因此virtual 也无用。编译器知道这一点并打破它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 2022-06-15
    • 2019-05-08
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多