![]() |
1
2
鉴于 Liskov Substitution Principle ,一般来说,我认为在接口级别指定这些契约确实更有意义。 LSP基本上说,抽象概念的每个实现都应该是可互换的,而抽象概念的用户不必知道其中的区别。换句话说,您的代码不应该因为切换到某个接口的另一个实现而开始中断。
通过在输入参数上强加特定于实现的附加要求,您有效地耦合了调用代码(在您的情况下,这很可能是处理
对于你的具体情况,推理可能适用也可能不适用(这就是为什么它是一个原则,不是板上钉钉的),但很明显,像代码契约这样的通用框架只能考虑一般原则:-)
编辑:经过更多思考,在我看来,派生接口可能是“真实的”接口,而不是泛型接口
也许我们需要C++在C#中的私有继承(或实现继承)来对消费者“隐藏”这个接口。 Read this excellent answer to a related question 。它还谈到,在这种情况下,利斯科夫的可替代性是“谎言”,我倾向于同意这一点。 |
![]() |
Åafak Gür · 通用接口的嵌套约定 11 年前 |
![]() |
julealgon · 为什么接口合同不适用于程序集之外? 12 年前 |
![]() |
Jamie Dixon · 代码契约和接口实现-1-1关系的一些原因是什么 12 年前 |