我是C#和OOP的新手,只是对显式接口实现提出了疑问。下面是代码:
接口定义:
interface IRun
{
void Run(); // implicitly public
}
实现IRun的类
class Car: IRun
{
public void Run() // have to use public here to match Interface definition
{
Console.WriteLine("Run");
}
}
因此我们知道接口的成员永远不会指定访问修饰符(因为所有接口成员都是隐式的公共和抽象),因此在Car类中,我们不能这样编码:
class Car: IRun
{
private void Run() //compile error, since it is public in interface, we have to math access modifiers
{
Console.WriteLine("Run");
}
}
但是我不明白为什么我们将接口成员显式实现为:
class Car: IRun
{
void IRun.Run()
{
Console.WriteLine("Run");
}
}
我的教科书上说 明确实现的界面成员是自动私有的 。
但是访问修饰符不是不匹配吗(一个在IRun中是公共的,另一个在Car中是私有的)?为什么编译器不会抛出错误?
P.S 我可以理解,如果多个接口具有相同的方法签名,则需要使用“私有”访问修饰符来解决名称冲突。为什么访问修饰符在原始接口定义和实现中为何不相同?