3 回答
TA贡献1816条经验 获得超6个赞
如果您使用相同的方法和不同的实现来实现两个接口,则必须显式实现。
public interface IDoItFast
{
void Go();
}
public interface IDoItSlow
{
void Go();
}
public class JustDoIt : IDoItFast, IDoItSlow
{
void IDoItFast.Go()
{
}
void IDoItSlow.Go()
{
}
}
TA贡献1846条经验 获得超7个赞
隐藏非首选成员很有用。例如,如果您同时实现这两种方法IComparable<T>,IComparable通常最好隐藏隐藏的IComparable重载,以免给人以为您可以比较不同类型的对象。同样,某些接口(例如)也不符合CLS IConvertible,因此,如果您未明确实现该接口,则要求CLS符合性的语言的最终用户将无法使用您的对象。(如果BCL实现者没有隐藏原语的IConvertible成员,那将是灾难性的:)
另一个有趣的注释是,通常使用这样的构造意味着显式实现接口的构造只能通过对接口类型进行装箱来调用它们。您可以使用通用约束来解决此问题:
void SomeMethod<T>(T obj) where T:IConvertible
将int传递给int时,它不会装箱。
TA贡献1825条经验 获得超6个赞
明确实现接口的一些其他原因:
向后兼容性:万一ICloneable接口发生变化,实现方法类成员不必更改其方法签名。
更干净的代码:如果将Clone方法从ICloneable中删除,则会出现编译器错误,但是,如果隐式实现该方法,则可能会得到未使用的“孤立”公共方法
强类型化:为了举例说明超级猫的故事,这将是我的首选示例代码,当您直接将其作为实例成员调用时,ICloneable显式实现允许Clone()强类型化MyObject:
public class MyObject : ICloneable
{
public MyObject Clone()
{
// my cloning logic;
}
object ICloneable.Clone()
{
return this.Clone();
}
}
- 3 回答
- 0 关注
- 637 浏览
添加回答
举报