我是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' 无法实现接口成员,因为它不是公共的。
为什么?
提前感谢您的帮助!
答案 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
{ }