[英]c# Properties in Abstract Base Classes
我有一个我无法解决的奇怪问题。 当我尝试编译以下剪切时,我收到此错误:
'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";
}
}
}
您的AbstractClass
需要从IBase
接口提供Property
的实现,即使它只是抽象本身:
public abstract class AbstractClass : IBase
{
public override string ToString()
{
return "I am abstract";
}
public abstract string Property { get; }
}
更新: Luke是正确的,具体实现需要指定Property
是一个覆盖,否则你将得到一个“不实现继承的抽象成员”错误:
public class ConcreteClass : AbstractClass
{
public override string Property {
get {
return "I am Concrete";
}
}
}
您必须将属性的抽象实现添加到AbstractClass:
public abstract class AbstractClass : IBase
{
public override string ToString()
{
return "I am abstract";
}
public abstract string Property { get; }
}
以及Concrete类的override关键字
AbstractClass应该实现包含Property的IBase,你还没有实现它
你抽象类没有实现IBase
接口。 只需将属性Property
添加到AbstractClass
。
public abstract String Property { get; }
您需要在AbstractClass
声明Property
以使其满足IBase
契约。
如果您希望ConcreteClass
能够覆盖Property
那么您应该将其声明为abstract
或virtual
。 然后,您需要使用override
声明Property
的ConcreteClass
实现。
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";
}
}
}
您需要像这样实现IBase -property Property :
public abstract class AbstractClass : IBase
{
public override string Property()
{
return "This is the base-class implementation";
}
}
或者让它抽象化 。
您必须在抽象类中实现Property属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.