我在C#(Uncle Bob)一书中的敏捷原理模式和实践中读到,衍生品中退化函数的存在并不总是表明存在LSP违规,但是当它们发生时值得关注它们。
我的问题是,有人在不违反LSP的情况下给我一个例子。
答案 0 :(得分:1)
我认为一个好的C#示例是各种流类。 abstract @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
....
}
类定义了许多可能不适用于派生类的方法。我正在考虑Stream
方法,Can[...]
,CanRead
,CanSeek
等等。从表面上看,它们是派生类中的退化方法不适用于,但它们是不一定需要实现的流的方面。例如,引用CanTimeout
抽象类的方法可以查询Stream
,并根据结果做出相应的反应,即使它是简并实现,只要简并实现返回正确答案即可。通过这种方式,CanRead
实现可能具有退化方法,但不会违反LSP。