首页 > 解决方案 > 为什么派生类中不调用该方法

问题描述

我有一个带有虚拟方法的基类,我在派生类中覆盖它,但执行时没有任何反应。

public class Derived : Browser 
{
    private Browser Browser;

    public string UserName;
    public string Password;


    public Derived(string proxy): base(proxy) 
    {
        Browser = new Browser(proxy);
        Browser.InitDriver(false, true);
    }

    protected override void ShowStatus() 
    {
        Debug.WriteLine(this.Status);
    }
}

根据

public class Browser 
{
    private string UserProxy;

    protected string Status = null;

    public Browser(string proxy) 
    {
        UserProxy = proxy;
    }

    protected virtual void ShowStatus() 
    {

    }

    public void InitDriver() 
    {
        Status = "Initializing driver...";
        ShowStatus();
    }
}

当我初始化派生 (new Derived("proxy")) 类时,不调用 showstatus 方法。

标签: c#

解决方案


您正在创建Browsernot of Derivedtherfore 的实例,调用在 onBrowser#ShowStatus和 not on 上执行Derived#ShowStatus

public Derived(string proxy): base(proxy) 
{
    Browser = new Browser(proxy);
    Browser.InitDriver(false, true);
}

只需调用InitDriver而不是在构造函数中创建新Browser实例:

public Derived(string proxy): base(proxy) 
{
    InitDriver(false, true);
}

也许这篇文章可以帮助理解组合(你实际上在做什么)和继承(你打算做什么)之间的区别。

https://www.thoughtworks.com/de/insights/blog/composition-vs-inheritance-how-choose


推荐阅读