为什么IList是这样定义的?
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
public interface ICollection<T> : IEnumerable<T>, IEnumerable
public interface IEnumerable<T> : IEnumerable
不就是这样吗
public interface IList<T> : ICollection<T>
所以,为了测试我创建了这些接口(interface),只是为了确定它是否有效!
public interface IOne
{
string One();
}
public interface ITwo : IOne
{
string Two();
}
public interface IThree : ITwo, IOne
{
string Three();
}
虽然它非常好,但 Resharper 提示“冗余接口(interface)”。
对于 Microsoft 继续进行此实现的任何想法?
接口(interface)“继承”是软件工程中最具误导性的术语之一。你没有继承 squat,接口(interface)没有任何实现,所以你也不能继承它。您只需继承需求来实现方法。
通过重复接口(interface)声明来添加该需求不会改变任何内容,您已经有了需求,添加额外的需求也没有任何区别。因此,既然这无关紧要,Microsoft 只是有用地重复了接口(interface),这样您就可以一口气知道哪些接口(interface)是由 List 实现的。您不必深入到接口(interface)声明就可以看到 List 也实现了 IEnumerable。这是一种 self 记录的编码风格,推荐。
请注意这枚勋章的另一面,两个具有完全相同方法的不同接口(interface)可以通过 单个 方法实现来实现。虽然这通常很有用,但有时这并不是您想要的。比方说,ICowboy 和 IPainter,它们都有一个 Draw() 方法。它不应该做同样的事情 :) 然后您必须回退到显式实现以避免歧义。
解决 Resharper 投诉,这当然不是很有帮助。 Resharper 倾向于假设程序员最坏的情况。但是如果你想关闭它那么你需要从 IThree 继承列表中删除 IOne,这是多余的。对于实现 IThree 的类也是如此,您还需要从继承列表中删除 ITwo 和 IOne。或者只是关闭警告。