gpt4 book ai didi

c# - 为什么不在派生类中调用该方法

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:50 25 4
gpt4 key购买 nike

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

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 方法。

最佳答案

您正在创建 Browser 的实例,而不是 Derived 的实例,因此调用是在 Browser#ShowStatus 而不是 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

关于c# - 为什么不在派生类中调用该方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52616094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com