接口实现错误

本文关键字:错误 实现 接口 | 更新日期: 2023-09-27 17:52:46

我是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_expam_1.derived.this[int]'无法实现接口成员,因为它不是公共的。

和这个

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

为什么?

感谢您的提前帮助!

接口实现错误

您需要将public访问修饰符添加到派生自该类的所有成员中。

默认情况下,它们的访问权限较低。

此外,您需要删除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;
        }
    }
}

您的代码还有其他问题,但这些都是没有编译的原因。

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

您不能override属性int MyProperty,因为没有什么可重写的。在基础class/interface中没有int MyProperty

你确实有很多愚蠢的问题

    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
{ }