インターフェイスとは純粋仮想関数だけの抽象クラスと同義であり、抽象メンバだけを持ちインスタンス化できません。
インターフェイスのアクセス修飾子は既定でpublicであり、これを指定することはできません。
interface MyInterface { void Method(); public void M1(); // error CS0106: 修飾子 'public' がこの項目に対して有効ではありません。 protected void M2(); // error CS0106: 修飾子 'protected' がこの項目に対して有効ではありません。 private void M3(); // error CS0106: 修飾子 'protected' がこの項目に対して有効ではありません。 }
// error CS0535: 'MyClass' はインターフェイス メンバー 'MyInterface.Method()' を実装しません。
class MyClass : MyInterface
{
}
// error CS0737: 'MyClass' は、インターフェイス メンバー 'MyInterface.Method()' を実装していません。'MyClass.Method()' は public ではないため、インターフェイス メンバーを実装できません。
class MyClass : MyInterface
{
void Method() { }
}
class MyClass : MyInterface { public void Method() { } }
シグネチャが同じ (名前と引数が同じ) メンバを持つ複数のインターフェイスを実装するクラスは、「インターフェイス名.クラスメンバ」の書式でそれらを分けて実装できます。明示的なインターフェイスの実装 - C# プログラミング ガイド | Microsoft Learn
interface I1 { void Method(); } interface I2 { void Method(); } class C1 : I1, I2 { public void Method() { } // I1.Method() または I2.Method()のいずれでも、このメソッドが呼ばれる } class C2 : I1, I2 { void I1.Method() { } // I1.Method()から、このメソッドが呼ばれる void I2.Method() { } // I2.Method()から、このメソッドが呼ばれる // public void I1.Method() { } // error CS0106: 修飾子 'public' がこの項目に対して有効ではありません。 // アクセス修飾子は省略する C# Multiple Interface Inheritance does not allow public access modifier with same name - Stack Overflow }