私は、ウィキペディアのエントリを何度も読んで、前述の原則の理解を深めようとしています。
いまだに私を悲しませる共分散と反分散の概念はさておき、ウィキペディアでは、スーパータイプの不変条件はサブタイプと履歴制約または履歴ルールで保持する必要があるとも述べています。これらの最後の 2 つの概念に基づいて、この小さな例を思い付きました。
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();
}
}
私の質問は、上記の 2 つの概念に基づいて、この例の原則に違反していますか? そうでない場合、なぜですか?
事前にどうもありがとうございました。