我一直在使用 RhinoMocks 进行一些模拟,它要求将模拟方法设为虚拟。这很好,除了我们有一个自定义框架,其中包含我想要模拟的方法,这些方法当前未标记为虚拟。
我无法预见使这些方法虚拟化会出现任何问题,但我想知道使方法虚拟化有哪些我应该注意的潜在危险?
实际上,如果该方法未设计为可重写并且有人重写了它,则可能会出现很大问题。特别是,切勿从构造函数中调用虚拟方法。考虑:
class Base {
public Base() {
InitializeComponent();
}
protected virtual void InitializeComponent() {
...
}
}
class Derived : Base {
private Button button1;
public Derived() : base() {
button1 = new Button();
}
protected override void InitializeComponent() {
button1.Text = "I'm gonna throw a null reference exception"
}
}
派生类可能不知道虚拟方法调用将导致其 InitializeComponent 方法在其自己的构造函数运行之前被调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)