给定以下接口:
interface IFoo
{
void Foo();
}
interface IBar : IFoo
{
void Bar();
}
Run Code Online (Sandbox Code Playgroud)
表示给定类实现的最佳方法是什么IBar?
class Implementation : IBar { ... }
Run Code Online (Sandbox Code Playgroud)
这看起来更简单,更清晰,但并不表示Implementation实现IFoo.
class Implementation : IBar, IFoo { ... }
Run Code Online (Sandbox Code Playgroud)
这似乎是最丰富的信息,但真正需要的额外信息?
编译器不需要额外的信息,但它可能对您的代码的读者有所帮助,因为读者不必知道IBar扩展IFoo.此框架中的一个例子是List<T>一个实现<IList<T>,ICollection<T>以及IEnumerable<T>,即使IList<T>; 延伸ICollection<T>和IEnumerable<T>.
编辑:我认为,至少对我来说,我列出这两者的主要原因是你通常不会想到接口彼此继承.从类派生时,您希望继承本身可以继承的行为.如果您感兴趣,可以按照类层次结构进行推导.使用接口时,接口的派生更加不寻常,因此您不太可能看起来并且更有可能错过连接.列出它们都可以解决这个问题而不会有太多痛苦.
就个人而言,我会选择前者.对于后者,假设你在这种情况下你有一堆派生类:
class DerivedA : Implementation, IBar, IFoo { ... }
class DerivedB : Implementation, IBar, IFoo { ... }
class DerivedC : Implementation, IBar, IFoo { ... }
class DerivedD : Implementation, IBar, IFoo { ... }
Run Code Online (Sandbox Code Playgroud)
然后你的Implementation变更要求,以便它现在需要实现另一个接口,例如IBaz(只要它提供非抽象的实现,它可以做而不必影响任何派生类),那么你有两个选择:
保留所有派生类定义,而不显式声明新接口信息,在这种情况下,类定义现在根据标准不正确,如果人们希望始终遵循标准,则可能会产生误导.
去查找所有派生类及其所有派生类,并修复它们的声明.这需要时间,有点容易出错并且难以完全完成,并且将您的单个文件更改为多文件签入.
这些选项都没有吸引力,所以我选择不会让你陷入困境的选项.只需声明派生最多的接口.
| 归档时间: |
|
| 查看次数: |
521 次 |
| 最近记录: |