我知道被覆盖的方法/属性的访问说明符可见性必须与基本方法/属性的访问说明符的可见性相同或更高,并且我还知道接口成员的可见性默认情况下是公共的。那么当我们在类中显式实现接口时,成员的可见性如何以及为什么可以是私有的,尽管可以通过将类对象转换为实现的接口来访问这些私有方法?
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"));' 语句向我们展示了最终访问类“程序”的私有方法。我的问题是为什么我们不能像使用接口方法那样隐藏抽象方法的可见性?为什么我们能够通过接口访问私有方法?任何帮助将不胜感激。