我听说Liskov替换原则(LSP)是面向对象设计的基本原则.它是什么以及它的使用例子是什么?
oop liskov-substitution-principle definition design-principles solid-principles
你能用一个很好的C#例子解释Liskov替换原理(SOLID的'L'),以简化的方式涵盖原理的所有方面吗?如果真的有可能.
我想使用代码合同为此通用接口指定合同:
interface IRandomWriteAccessible<T>
{
T this[uint index] { set; }
uint Length { get; }
}
Run Code Online (Sandbox Code Playgroud)
文档ContractClass说明在为接口指定合同时使用该属性.但是,编译器会抱怨这个:
[ContractClass(typeof(IRandomWriteAccessibleContract<T>))]
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error
interface IRandomWriteAccessible<T> { … }
[ContractClassFor(typeof(IRandomWriteAccessible<T>))]
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error
sealed class IRandomWriteAccessibleContract<T> : IRandomWriteAccessible<T> { … }
Run Code Online (Sandbox Code Playgroud)
似乎类型参数不能与属性一起使用.
如何做我写我的通用接口一份合同吗?或者代码合同无法实现这一点吗?