【发布时间】:2018-10-03 04:52:30
【问题描述】:
我有一个带有虚方法的基类,我在派生类中覆盖了它,但执行时没有任何反应。
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方法没有被调用。
【问题讨论】:
-
由于多种原因,此代码无法编译
-
您的 Derived 类不仅继承自 Browser 类,而且您还在该类中定义了
private Browser Browser;。这是故意的吗? -
@JohnLBevan 这叫做 Proxy 模式
-
@T.S.一定程度上同意;即涵盖对
Browser的内部引用的使用;但我的意思是Derived已经是Browser;因此它已经通过继承获得了该引用。如果Derived和Browser都继承自IBrowser,那么这种模式会更有意义;但在这种情况下,Derived已经有base,它做同样的工作。 -
@JohnLBevan 是的。经典代理将从接口等继承。但现实生活中的实现可能会有所不同。这是 Proxy-Decorator 之间的东西。我明白为什么要这样做。例如,如果我想要所有东西都像继承的类,但是 1 方法需要做一些时髦的事情,并且类是密封的。事实上,我最近遇到了这种情况——第 3 方组件中有一个错误。所以,除了我从与第三方类相同的基类继承之外,我几乎做了这个。当然,在我知道这种模式会起作用之前,我必须反思一下,看看什么能解决这个问题
标签: c#