明示的なインターフェイスの実装を行う場合は実際には、実装クラスにメソッドをプライベートにすることができます。
public interface IMyInterface
{
bool GetMyInfo(string request);
}
public class MyClass : IMyInterface
{
public void SomePublicMethod() { }
bool IMyInterface.GetMyInfo(string request)
{
// implementation goes here
}
}
このアプローチはGetMyInfo
がMyClass
のパブリックインターフェイスの一部ではないことを意味します。それだけでIMyInterface
にMyClass
インスタンスをキャストすることによってアクセスすることができます。
MyClass instance = new MyClass();
// this does not compile
bool result = instance.GetMyInfo("some request");
// this works well on the other hand
bool result = ((IMyInterface)instance).GetMyInfo("some request");
ので、インターフェースのコンテキストで、そのすべてのメンバーは、公開されます。それらは実装クラスのパブリックインターフェイスから隠すことができますが、常にインスタンスへの型キャストを行い、そのようにメンバにアクセスする可能性があります。
[C#インターフェイスの非公開メンバー]の複製が可能です(http://stackoverflow.com/questions/17576/non-public-members-for-c-sharp-interfaces) – nawfal