【发布时间】:2016-08-20 15:32:36
【问题描述】:
我的示例程序如下所示;
public class Animal
{
public virtual string MakeSound()
{
return "General Sound";
}
}
public class Dog : Animal
{
public override string MakeSound()
{
return "Bow..Bow..";
}
}
}
static void Main(string[] args)
{
Animal obj1 = new Animal();
Console.WriteLine("General Animal's sound id " + obj1.MakeSound());
Dog obj2 = new Dog();
Console.WriteLine("Dog Animal's sound id " + obj2.MakeSound());
//Violate LSP
Animal obj3 = new Dog();
Console.WriteLine("Animal's sound id " + obj3.MakeSound());
Console.ReadKey();
}
据我了解,当我们为 obj3 之类的 Animal 创建 Dog 实例时,我们违反了 LSP。请确认我的理解。如果是,请告诉我在这种情况下如何实现以更好地理解。我认为我的编码在概念上是正确的
【问题讨论】:
-
你为什么认为这会破坏 LSP? (它没有...)
-
您希望它在编译时失败还是希望得到不同的输出?
标签: c# design-patterns liskov-substitution-principle