我正在研究接口,并且遇到了一些奇怪的接口问题,其中的规则是我们必须实现public接口方法。但是在此示例中不是。
我尝试了自己的经验,发现的答案确实违反了规则。
public interface DropV1
{
void Ship();
}
public interface DropV2
{
void Ship();
}
//accepted by the editor
class DropShipping : DropV1, DropV2
{
void DropV1.Ship() { }
void DropV2.Ship() { }
}
我预计10亿%的实施将是:
public void DropV1.Ship()
public void DropV2.Ship()
为什么会这样?
答案 0 :(得分:6)
它不是private
,而是称为explicit interface implementation。在interface
中,所有方法的定义都是public
,因此您不需要public
关键字(即使您不想在这里使用它)。需要提及的重要一点是,在显式实现的interface
方法仅可通过interface
实例使用,而不能通过class
实例(例如
public class SampleClass : IControl
{
void IControl.Paint()
{
System.Console.WriteLine("IControl.Paint");
}
}
IControl ctrl = new SampleClass();
ctrl.Paint(); //possible
SampleClass ctrl = new SampleClass();
ctrl.Paint(); //not possible
var ctrl = new SampleClass();
ctrl.Paint(); //not possible
((IControl) new SampleClass()).Paint(); //possible