当我需要显式实现接口成员时,它是私有的。
例如:
// when explicit implementation it is always private
void IPointy.Draw( )
{
}
为什么强制实施这样的设计规则?
注意:
当两个接口具有相同的方法时,为了避免冲突我必须明确实现为
class Line :IPointy
{
// Now it is private
void IPointy.Draw( )
{
}
}
我的问题是实施的原因是私有的。
答案 0 :(得分:19)
明确实现的接口成员不仅仅是私有的。他们是公开的 - 有点像。
它们是公开的,任何可以强制引用接口的代码都可以调用它们。 (如果界面本身不公开,那么我猜你可以说它们实际上具有与界面相同的访问级别。)
他们没有任何指定的访问级别,因为他们 在接口方面是公开的:没有任何选择。它们不是一般类型的公共成员的公共成员,但它们可以从任何其他程序集中调用,这些程序集可以获取引用并将其强制转换为接口类型...
C#3.0规范就是这样说的:
显式接口成员 实现有不同 可访问性特征比 其他成员。因为明确 接口成员实现是 从来没有完全可以访问 方法调用中的限定名称 或财产访问,他们在一个 感觉私密。但是,因为他们可以 通过界面访问 例如,它们在某种意义上也是如此 公共
答案 1 :(得分:0)
因为该类实现的2个接口可以具有相同名称的方法。这就是为什么该方法在通过类引用访问时是私有的,而在接口时是公共的。
答案 2 :(得分:0)
因为你说我的对象是IPointy而不是你可以调用IPointy方法绘制。否则没有。
public interface IPointy
{
void Draw();
}
public class PointyImplementer : IPointy
{
#region IPointy Members
void IPointy.Draw()
{
Console.WriteLine("You have drawn");
}
#endregion
}
class Program
{
static void Main(string[] args)
{
IPointy pi = new PointyImplementer();
pi.Draw();
Console.Read();
}
}
这是一种掩盖正在实现的界面的方法。