繁体   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