[英]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.