63501


下記コードのようにインタフェースAを継承した抽象クラスBを実装しています。  
抽象クラスBではインタフェースAで実装を強制されているMethodAを実装しなければいけません。  
ですが、MethodAの実装をabstructで自身を継承したクラスにさらに強制させています。  
このような書き方はC#の言語仕様上よいものなのでしょうか。

[code]

    public interface A
    {
        int MethodA();
    }
    
    public abstract class B : A
    {
        public abstract int MethodA();
    }
    
    public class C : B
    {
        public override int MethodA()
        {
            return 1;
        }
    }
    
[/code]


CC BY-SA 4.0
2020-03-02T01:50:40.553
63482
2020-03-02T14:01:18.043
32228
question
c#
interfaceで定義したメソッドを、abstractでさらに継承先クラスに実装を強制させる書き方はやっていいのか


問題ありません。C#言語リファレンスの[abstract](https://docs.microsoft.com/ja-
jp/dotnet/csharp/language-reference/keywords/abstract)にそのままズバリ例として挙げられています。

> インターフェイスを実装する抽象クラスで、インターフェイス メソッドを抽象メソッドにマップすることもできます。 次に例を示します。
[code]

>     interface I
>     {
>         void M();
>     }
>     abstract class C : I
>     {
>         public abstract void M();
>     }
>  
[/code]


CC BY-SA 4.0
2020-03-02T14:01:18.043
63501
2020-03-02T14:01:18.043
4236
63482
answer