2009-08-27 24 views
6

私は解決できない奇妙な問題があります。私は、次の切り取らをコンパイルしようとすると、私はこのエラーを取得:c#抽象基本クラスのプロパティ

「AbstractClass」インターフェイスメンバ「プロパティ」(コンパイラエラー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"; 
     } 
    } 
} 

答えて

19

あなたAbstractClassニーズはそれ自体だけで抽象的だとしても、IBaseインタフェースからPropertyのための実装を提供します

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

    public abstract string Property { get; } 
} 

更新:ルークは正しいです具体的な実装ではPropertyがオーバーライドであることを指定する必要があります。そうしないと、継承された抽象メンバを実装していません "というエラーが発生します。

public class ConcreteClass : AbstractClass 
{ 
    public override string Property { 
     get { 
      return "I am Concrete"; 
     } 
    } 
} 
+1

ありがとう、それは明らかにそれを解決します。なぜ私は、インターフェイスが抽象クラスで処理される通常の方法で中断しているように思うのだろうかと疑問に思っています。 –

+0

どういう意味ですか?抽象クラスのサブクラスは、IBaseを実装していることを必ずしも知る必要はありません。実装する必要のある仮想メンバーと抽象メンバーだけを参照する必要があります。 – dahlbyk

+3

また、 'override'修飾子を使って' ConcreteClass'に 'Property'を宣言する必要があります。 – LukeH

2

AbstractClassは、プロパティが含まれているIBASEを実施することになっている、とあなたはそれを

1

を実装していないあなたがIBASEを実装する必要が -property プロパティこのような

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

またはそれにするabstract

2

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

public abstract String Property { get; } 
1

抽象クラスでPropertyプロパティを実装する必要があります。あなたのAbstractClassに財産の抽象実装を追加する必要が

3

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

    public abstract string Property { get; } 

} 

そして、overrideキーワードコンクリートクラスには

2

あなたはそれがIBase契約を履行するようAbstractClassPropertyを宣言する必要があります。

ConcreteClassPropertyを上書きできるようにする場合は、abstractまたはvirtualと宣言する必要があります。次に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"; 
      } 
     } 
    } 
関連する問題