c# - 为什么派生类中不调用该方法
问题描述
我有一个带有虚拟方法的基类,我在派生类中覆盖它,但执行时没有任何反应。
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
not of Derived
therfore 的实例,调用在 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
推荐阅读
- java - 在 Java 的模板提案中代表什么不同的颜色和符号?
- nosql - RavenDB 替代以减少预算
- arrays - Mongoose Model, cleaning/parsing an Array efficiently
- cmake - What is the proper way to document a CMake module?
- c# - Creating a Visual Studio menu command to get current active file path
- php - 如何在 Bootstrap Modal 中传递 GET 变量?
- html - 三个具有自动宽度的 div 与最宽的 div 一样宽,使每个 div 与其内容一样宽
- c# - AlwaysEncrypted 插入间歇性失败
- unity3d - Unity ScriptableObject 加载行为
- json - 如何在 JSON 响应中拆分参数的多个值?