相关疑难解决方法(0)

Liskov替代原则的例子是什么?

我听说Liskov替换原则(LSP)是面向对象设计的基本原则.它是什么以及它的使用例子是什么?

oop liskov-substitution-principle definition design-principles solid-principles

845
推荐指数
24
解决办法
29万
查看次数

SOLID Essentials遗漏点?

我已经阅读了很多这方面的文章,但我还有两个问题.

问题#1 - 关于依赖性倒置:

它声明高级类不应该依赖于低级类.两者都应该取决于抽象.抽象不应该依赖于细节.细节应取决于抽象.

例如 :

public class BirthdayCalculator
{
    private readonly List<Birthday> _birthdays;

    public BirthdayCalculator()
    {
        _birthdays = new List<Birthday>();// <----- here is a dependency
    }
...
Run Code Online (Sandbox Code Playgroud)

修复:把它放在一个ctor.

public class BirthdayCalculator
{
    private readonly IList<Birthday> _birthdays;

    public BirthdayCalculator(IList<Birthday> birthdays) 
    {
        _birthdays = birthdays;
    }
Run Code Online (Sandbox Code Playgroud)
  • 如果它将在ctor中 - 我将不得不每次使用该课程时发送它.所以在打电话给BirthdayCalculator班级时我必须保留它.它可以这样做吗?

  • 我可以争辩说,在修复之后,仍然 - IList<Birthday> _birthdays不应该在那里(Birthdayin IList) - 但它应该是IList<IBirthday>.我对吗 ?

问题#2 - 关于利斯科夫换人:

派生类必须可替代其基类

或更准确:

设q(x)是关于类型T的对象x可证明的属性.对于类型S的对象y,q(y)应该为真,其中S是T的子类型.

(已经读过这个)

例如:

public …
Run Code Online (Sandbox Code Playgroud)

c# design-patterns liskov-substitution-principle inversion-of-control solid-principles

6
推荐指数
1
解决办法
295
查看次数