我有以下代碼:多態性(不)與C#訪問者模式(和新的,而不是覆蓋)破
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); }
}
有爲什麼會調用 new Node().Accept(new VisitorSpecial())
時,可以選擇 Accept(Visitor v)
方法的任何原因
更新:好的,我的壞,我意識到我在訪客中使用「新」,而不是覆蓋。現在我知道爲什麼「新中斷多態」。這使我的問題完全愚蠢。謝謝您的幫助。
嗯。我只手頭有一個Mono C#編譯器,但在我的盒子上選擇了正確的Accept(VisitorApecial v)。 – 2009-10-19 10:23:12
不應該將C#標記添加到您的問題嗎? – xtofl 2009-10-19 10:55:47