抽象クラスを使用してネストされたインターフェイスを実装しようとしたときに、C#4.0で誤ってこれに遭遇しました。
public class A
{
public interface InnerInterface
{
void Method();
}
}
public abstract class B : A.InnerInterface
{
public abstract void A.InnerInterface.Method();
}
public class C : B
{
public override void A.InnerInterface.Method()
{
System.Console.WriteLine("C::A.InnerInterface.Method()");
}
}
残念ながら、上記のコードはコンパイルに失敗し、次のエラーが発生します。
エラーCS0106:修飾子'abstract'はこのアイテムには無効です
エラーCS0106:修飾子'public'はこのアイテムには無効です
エラーCS0106:修飾子'override'はこのアイテムには無効です
エラーCS0106:修飾子'public'はこのアイテムには無効です
ただし、インターフェイスがネストされていないインターフェイスである場合は、次のようになります。
public interface SomeInterface
{
void Method();
}
public abstract class B : SomeInterface
{
public abstract void Method();
}
public class C : B
{
public override void Method()
{
System.Console.WriteLine("C::Method()");
}
}
コンパイルはOKです。
最初のケースでコンパイラエラーが発生するのはなぜですか?ここで何かが足りませんか?または、抽象クラスを使用してネストされたインターフェイスを実装することは許可されていませんか?