我有一个我无法解决的奇怪问题。当我尝试编译以下剪辑时,我收到此错误:
'AbstractClass'没有实现接口成员'Property'(编译器错误CS0535)
在线帮助告诉我创建我的AbstractClass摘要。谁能告诉我哪里出错了?
干杯Rüdiger
public interface IBase {
string Property { get; }
}
public abstract class AbstractClass : IBase
{
public override string ToString()
{
return "I am abstract";
}
}
public class ConcreteClass : AbstractClass
{
string Property {
get {
return "I am Concrete";
}
}
}
答案 0 :(得分:20)
您的AbstractClass
需要从Property
界面提供IBase
的实施,即使它只是抽象本身:
public abstract class AbstractClass : IBase
{
public override string ToString()
{
return "I am abstract";
}
public abstract string Property { get; }
}
更新: Luke是正确的,具体实现需要指定Property
是覆盖,否则你将得到“不实现继承的抽象成员”错误:< / p>
public class ConcreteClass : AbstractClass
{
public override string Property {
get {
return "I am Concrete";
}
}
}
答案 1 :(得分:3)
您必须将属性的抽象实现添加到AbstractClass:
public abstract class AbstractClass : IBase
{
public override string ToString()
{
return "I am abstract";
}
public abstract string Property { get; }
}
Concrete类的覆盖关键字
答案 2 :(得分:2)
AbstractClass应该实现包含Property的IBase,而你还没有实现它
答案 3 :(得分:2)
您抽象类不实现接口IBase
。只需将属性Property
添加到AbstractClass
。
public abstract String Property { get; }
答案 4 :(得分:2)
您需要在Property
中声明AbstractClass
,以使其符合IBase
合同。
如果您希望ConcreteClass
能够覆盖Property
,则应将其声明为abstract
或virtual
。然后,您需要使用ConcreteClass
声明Property
override
的实施。
public interface IBase
{
string Property { get; }
}
public abstract class AbstractClass : IBase
{
public abstract string Property { get; }
public override string ToString()
{
return "I am abstract";
}
}
public class ConcreteClass : AbstractClass
{
public override string Property
{
get
{
return "I am Concrete";
}
}
}
答案 5 :(得分:1)
您需要像这样实施 IBase -property Property :
public abstract class AbstractClass : IBase
{
public override string Property()
{
return "This is the base-class implementation";
}
}
或者将其设为抽象。
答案 6 :(得分:1)
您必须在抽象类中实现Property属性。