6

解決できない奇妙な問題があります。次のsnippedをコンパイルしようとすると、次のエラーが発生します。

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

}

そして、Concreteクラスへのoverrideキーワード

于 2009-08-27T12:37:06.673 に答える
2

AbstractClassは、プロパティを含むIBaseを実装することになっていますが、まだ実装していません。

于 2009-08-27T12:36:07.330 に答える
2

抽象クラスはインターフェースを実装していませIBase。プロパティPropertyをに追加するだけAbstractClassです。

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

契約を履行するためPropertyに宣言する必要があります。AbstractClassIBase

ConcreteClassオーバーライドできるようにする場合は、またはPropertyとして宣言する必要があります。次に、 withの実装を宣言する必要があります。abstractvirtualConcreteClassPropertyoverride

    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 に答える