接口实现错误

时间:2013-01-12 18:06:52

标签: c#

我是c#编程的新手,我知道这是一个业余问题所以请不要笑我!

我声明了这些接口

class derived : iInterface3
{
    double[] d = new double[5];
    public override int MyProperty
    {
        get
        {
            return 5;
        }
        set
        {
            throw new Exception();
        }
    }
    int iProperty
    {
        get
        {
            return 5;
        }
    }
    double this[int x]
    {
        set
        {
            d[x] = value;
        }
    }
}
class derived2 : derived
{

}
interface iInterface
{
    int iProperty
    {
        get;
    }
    double this[int x]
    {
        set;
    }
}
interface iInterface2 : iInterface
{ }
interface iInterface3 : iInterface2
{ }

即使我将iInterface的所有成员实现为派生类,但我仍然记得这个错误。

  

'final_exam_1.derived'未实现接口成员   'final_exam_1.iInterface.this [INT]'。 'final_exam_1.derived.this [INT]'   无法实现接口成员,因为它不是公共的。

和这个

  

'final_exam_1.derived'未实现接口成员   'final_exam_1.iInterface.iProperty'。 'final_exam_1.derived.iProperty'   无法实现接口成员,因为它不是公共的。

为什么?

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

您需要将public access modifier添加到从该类派生的所有成员。

default,他们的访问权限会降低。

此外,您需要删除override,因为在实现接口时没有任何内容可以覆盖。覆盖是指您希望覆盖的虚拟方法。

class derived : iInterface3
{
    double[] d = new double[5];

    public int MyProperty
    {
        get
        {
            return 5;
        }
        set
        {
            throw new Exception();
        }
    }

    public int iProperty
    {
        get
        {
            return 5;
        }
    }

    public double this[int x]
    {
        set
        {
            d[x] = value;
        }
    }
}

您的代码还存在其他问题,但这些是未编译内容的原因。

答案 1 :(得分:0)

使iProperty和索引器公开或使用显式接口实现。显式实现的声明如下所示:int iInterface3.iProperty

答案 2 :(得分:0)

您无法override属性int MyProperty,因为无法覆盖。基础int MyProperty中没有class/interface

答案 3 :(得分:0)

哟确实有很多愚蠢的问题

    public override int MyProperty
    {
        get
        {
            return 5;
        }
        set
        {
            throw new Exception();
        }
    }

因为你是从一个接口实现的,而不是已经拥有虚拟成员的基类/抽象类,因此覆盖是没有意义的。

第二期。

    int iProperty
    {
        get
        {
            return 5;
        }
    }

继承的属性不能是private类型。

固定代码:

class derived : iInterface3
{
    readonly double[] d = new double[5];
    public int MyProperty
    {
        get
        {
            return 5;
        }
        set
        {
            throw new Exception();
        }
    }

    public int iProperty
    {
        get
        {
            return 5;
        }
    }

    public double this[int x]
    {
        set
        {
            d[x] = value;
        }
    }
}
class derived2 : derived
{

}
interface iInterface
{
    int iProperty
    {
        get;
    }
    double this[int x]
    {
        set;
    }
}
interface iInterface2 : iInterface
{ }
interface iInterface3 : iInterface2
{ }