接口实现错误
本文关键字:错误 实现 接口 | 更新日期: 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
{ }