为什么要明确实现接口?

那么,显式实现接口的好用例到底是什么?

仅仅是为了使使用该类的人们不必查看intellisense中的所有那些方法/属性?


梦里花落0921
浏览 595回答 3
3回答

潇湘沐

如果您使用相同的方法和不同的实现来实现两个接口,则必须显式实现。public interface IDoItFast{    void Go();}public interface IDoItSlow{    void Go();}public class JustDoIt : IDoItFast, IDoItSlow{    void IDoItFast.Go()    {    }    void IDoItSlow.Go()    {    }}

喵喵时光机

隐藏非首选成员很有用。例如,如果您同时实现这两种方法IComparable<T>,IComparable通常最好隐藏隐藏的IComparable重载,以免给人以为您可以比较不同类型的对象。同样,某些接口(例如)也不符合CLS IConvertible,因此,如果您未明确实现该接口,则要求CLS符合性的语言的最终用户将无法使用您的对象。(如果BCL实现者没有隐藏原语的IConvertible成员,那将是灾难性的:)另一个有趣的注释是,通常使用这样的构造意味着显式实现接口的构造只能通过对接口类型进行装箱来调用它们。您可以使用通用约束来解决此问题:void SomeMethod<T>(T obj) where T:IConvertible将int传递给int时,它不会装箱。

胡子哥哥

明确实现接口的一些其他原因:向后兼容性:万一ICloneable接口发生变化,实现方法类成员不必更改其方法签名。更干净的代码:如果将Clone方法从ICloneable中删除,则会出现编译器错误,但是,如果隐式实现该方法,则可能会得到未使用的“孤立”公共方法强类型化:为了举例说明超级猫的故事,这将是我的首选示例代码,当您直接将其作为实例成员调用时,ICloneable显式实现允许Clone()强类型化MyObject:public class MyObject : ICloneable{&nbsp; public MyObject Clone()&nbsp; {&nbsp; &nbsp; // my cloning logic;&nbsp;&nbsp;&nbsp; }&nbsp; object ICloneable.Clone()&nbsp; {&nbsp; &nbsp; return this.Clone();&nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP