6

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

“AbstractClass”未实现接口成员“Property”(编译器错误 CS0535)

在线帮助告诉我让我的 AbstractClass 抽象,它就是这样。谁能告诉我哪里出错了?

干杯吕迪格

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

7 回答 7

20

AbstractClass需要PropertyIBase接口提供一个实现,即使它只是抽象本身:

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";
        }
    }
}
于 2009-08-27T12:35:39.170 回答
3

您必须将属性的抽象实现添加到您的 AbstractClass :

public abstract class AbstractClass : IBase
{
    public override string ToString()
    {
        return "I am abstract";
    }

    public abstract string Property { get; }

}

以及具体类的覆盖关键字

于 2009-08-27T12:37:06.673 回答
2

AbstractClass 应该实现包含 Property 的 IBase,而您还没有实现它

于 2009-08-27T12:36:07.330 回答
2

你的抽象类没有实现接口IBase。只需将属性添加PropertyAbstractClass.

public abstract String Property { get; }
于 2009-08-27T12:36:27.000 回答
2

您需要申报PropertyAbstractClass使其履行IBase合同。

如果您希望ConcreteClass能够覆盖,Property那么您应该将其声明为abstractor virtual。然后你需要声明with的ConcreteClass实现。Propertyoverride

    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";
            }
        }
    }
于 2009-08-27T12:38:07.423 回答
1

您需要像这样实现IBase -property属性

public abstract class AbstractClass : IBase
{
    public override string Property()
    {
        return "This is the base-class implementation";
    }
}

或者让它抽象

于 2009-08-27T12:36:09.293 回答
1

您必须在抽象类中实现 Property 属性。

于 2009-08-27T12:36:44.117 回答