나는 위의 원칙에 대한 나의 이해를 정립하고, wikipedia 항목을 반복해서 읽음으로써 그렇게하려고한다.Liskov 대체 원리 이해
공산주의와 Contravariance의 개념을 제쳐두고 나에게 슬픔을 안겨주는 wikipedia는 또한 상위 유형의 불변성을 하위 유형과 역사 제약 또는 역사 규칙에 보존해야한다고 언급합니다. 마지막 두 개념을 바탕으로 나는이 작은 예를 내놓았다 :
는class Program
{
static void Main(string[] args)
{
var fooUser = new FooUser();
var fooBase = new FooBase("Serge");
var fooDerived = new FooDerived("Serge");
fooUser.Use(fooBase); //will print "Serge"
fooUser.Use(fooDerived); //will print "New User"
Console.ReadKey();
}
}
public class FooUser
{
public void Use(IFoo foo)
{
foo.DoSomething();
Console.WriteLine(foo.Name);
}
}
public interface IFoo
{
string Name { get; }
void DoSomething();
}
public class FooBase : IFoo
{
public string Name { get; protected set; }
public FooBase(string name)
{
Name = name;
}
public virtual void DoSomething()
{
}
}
public class FooDerived : FooBase
{
public FooDerived(string name) : base(name)
{
}
public override void DoSomething()
{
Name = "New Name";
base.DoSomething();
}
}
그래서 내 질문은 : 두 위에서 언급 한 개념을 기반으로,이 예제 원칙을 위반입니까? 그렇지 않다면, 왜?
대단히 감사합니다.
귀하의 설명은 좋은 관점을 제공합니다. – vibhu