为什么接受实现私有接口方法?

时间:2019-03-28 14:37:19

标签: c# interface

我正在研究接口,并且遇到了一些奇怪的接口问题,其中的规则是我们必须实现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()

为什么会这样?

1 个答案:

答案 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