我需要有关“ this”关键字和继承的帮助
作者:互联网
abstract class BaseClass
{
public virtual void Accept(IVisitor visitor)
{
visitor.Visit(this);
}
}
class DerivedClass: BaseClass
{
}
interface IVisitor
{
void Visit(BaseClass baseEntity);
void Visit(DerivedClass derivedEntity);
}
class Visitor : IVisitor
{
public void Visit(DerivedClass derivedEntity)
{
Debug.WriteLine("Derived Entity visited");
}
public void Visit(BaseClass baseEntity)
{
Debug.WriteLine("Base Entity visited");
}
}
经过上述脱节
class Program
{
static void Main(string[] args)
{
DerivedClass derived = new DerivedClass();
Visitor visitor = new Visitor();
derived.Accept(visitor);
}
}
产生
"Base Entity visited"
但是我希望它能产生
"Derived Entity visited"
>谁能解释为什么?
>我应该怎么做才能生成“拜访的派生实体”?我不想覆盖“接受”功能.
解决方法:
您在这里面临的问题是多个调度.编译器选择基类,因为您正在从基类中调用它.您可以添加的一种快速解决方案是使用动态:
public virtual void Accept(IVisitor visitor)
{
visitor.Visit(this as dynamic);
}
您使编译器不知道对象的实际类型,然后调用正确的Visit重载.
这是MSND的一些额外读物
标签:inheritance,abstract-class,this,virtual-functions,c 来源: https://codeday.me/bug/20191111/2020571.html