其他分享
首页 > 其他分享> > 我需要有关“ this”关键字和继承的帮助

我需要有关“ 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