为什么明确实现接口?
那么,明确实现接口的好用例究竟是什么?
仅仅是为了让使用该类的人不必在智能感知中查看所有这些方法/属性?
如果你实现了两个接口,都使用相同的方法和不同的实现,那么你必须明确地实现。
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
当你传递给它的时候不会填充整数。
显式实现接口的一些其他原因:
向后兼容性 :如果ICloneable
接口更改,实现方法类成员不必更改其方法签名。
更干净的代码 :如果从ICloneable中删除Clone
方法,会出现编译器错误,但是如果隐式实现该方法,则最终可能会使用未使用的“孤立”公共方法
强类型 :用一个例子来说明supercat的故事,这将是我的首选示例代码,实现ICloneable
时,如果直接将它作为MyObject
实例成员调用时,显式允许将Clone()
强类型化:
public class MyObject : ICloneable
{
public MyObject Clone()
{
// my cloning logic;
}
object ICloneable.Clone()
{
return this.Clone();
}
}
链接地址: http://www.djcxy.com/p/50417.html
上一篇: Why implement interface explicitly?
下一篇: App crashes when deploying to device (iPod Touch), opening from device works