簡體   English   中英

c#抽象基類中的屬性

[英]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那么您應該將其聲明為abstractvirtual 然后,您需要使用override聲明PropertyConcreteClass實現。

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM