c# – 使方法虚拟有什么危险?

我一直在用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"
    }
}

Derived类可能不知道虚方法调用将导致在其自己的构造函数的单行运行之前调用其InitializeComponent方法.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...