c#抽象基类中的属性

时间:2009-08-27 12:33:58

标签: c# interface properties abstract

我有一个我无法解决的奇怪问题。当我尝试编译以下剪辑时,我收到此错误:

'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";
        }
    }
}

7 个答案:

答案 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,则应将其声明为abstractvirtual。然后,您需要使用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属性。