次のコードがあります。
class Visitor
{
internal virtual void Visit(Node n) { }
}
class VisitorSpecial : Visitor
{
internal new void Visit(Node n) { }
}
class Base
{
internal virtual void Accept(Visitor v) { }
internal virtual void Accept(VisitorSpecial v) { }
}
class Node : Base
{
internal override void Accept(Visitor v){ v.Visit(this); }
internal override void Accept(VisitorSpecial v){ v.Visit(this); }
}
Accept(Visitor v)
呼び出し時にメソッドが選択される
理由はありますか
new Node().Accept(new VisitorSpecial())
更新: OK、悪いことに、オーバーライドの代わりにビジターで「new」を使用していることに気付きました。これで、「new breaks polymorphism」の理由がわかりました。これは私の質問を完全にばかげています。助けてくれてありがとう。