c# – 如何选择实现接口还是显式实现接口?

有两种方法可以实现接口:

interface IMyInterface
{
    void Foo();
}

class IImplementAnInterface : IMyInterface
{
    public void Foo()
    {
    }
}
// var foo = new IImplementAnInterface();
// foo.Foo(); //Ok
// ((IMyInterface)foo).Foo(); //Ok

class IExplicitlyImplementAnInterface : IMyInterface
{
    void IMyInterface.Foo()
    {
    }
}
// var foo = new IExplicitlyImplementAnInterface();
// foo.Foo(); //ERROR!
// ((IMyInterface)foo).Foo(); //Ok

不同之处在于,如果接口是显式实现的,那么在允许某人调用Foo方法之前,它必须实际上被转换为给定的接口.

如何决定使用哪个?

最佳答案
如果存在冲突(两个接口的方法具有相同的签名,或者您的类/基类和接口以相同的方式冲突),并且您不希望冲突方法具有相同的主体,那么您必须使用显式接口.

否则,您可以自由选择.如果要隐藏某些已实现的方法,请选择显式方法.例如,Dictionary<,> class使用ICollection的一些方法<>界面,因为隐藏的方法会让人迷惑.

转载注明原文:c# – 如何选择实现接口还是显式实现接口? - 代码日志