オーバーライドされたメソッド/プロパティのアクセス指定子の可視性は、基本メソッド/プロパティの可視性と同じかそれ以上でなければならないことを知っています。また、インターフェイスのメンバーの可視性はデフォルトでパブリックであることも知っています。では、クラスオブジェクトを実装されたインターフェイスにキャストすることでこれらのプライベートメソッドにアクセスできるにもかかわらず、クラスにインターフェイスを明示的に実装するときに、メンバーの可視性をプライベートにする方法と理由は何でしょうか。
public interface IRocker
{
string RockOff(string str);
}
public abstract class AmAbstract
{
public abstract string SomeMethod(string str);
}
class Program : AmAbstract, IRocker
{
static void Main(string[] args)
{
new Hello().RockU();
Console.ReadKey();
}
string IRocker.RockOff(string str)
{
return str;
}
public override string SomeMethod(string str)
{
return str;
}
}
public class Hello
{
public void RockU()
{
Console.WriteLine(((IRocker)(new Program())).RockOff("Damn"));
Console.WriteLine(((AmAbstract)(new Program())).SomeMethod("lalalalala"));
}
}
'Console.WriteLine(((IRocker)(new Program()))。RockOff( "Damn"));' ステートメントは、最終的にクラス'Program'のプライベートメソッドにアクセスすることを示しています。私の質問は、インターフェイスメソッドのように抽象メソッドの可視性を隠すことができないのはなぜですか?そして、なぜ私たちはインターフェースを介してプライベートメソッドにアクセスできるのですか?どんな助けでも大歓迎です。