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

前端之家收集整理的这篇文章主要介绍了c# – 使方法虚拟有什么危险?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在用RhinoMocks做一些嘲弄,它需要将模拟的方法变成虚拟的.这很好,除了我们有一个自定义框架,其中包含我想要模拟的方法,这些方法当前没有标记为虚拟.

我不能预见到使这些方法变得虚拟的任何问题,但我想知道使方法虚拟的一些潜在危险我应该注意什么?

解决方法

实际上,如果该方法不是被设计为被覆盖并且有人覆盖它,那么它可能是非常有问题的.特别是,永远不要从构造函数调用方法.考虑:
  1. class Base {
  2. public Base() {
  3. InitializeComponent();
  4. }
  5. protected virtual void InitializeComponent() {
  6. ...
  7. }
  8. }
  9.  
  10. class Derived : Base {
  11. private Button button1;
  12. public Derived() : base() {
  13. button1 = new Button();
  14. }
  15. protected override void InitializeComponent() {
  16. button1.Text = "I'm gonna throw a null reference exception"
  17. }
  18. }

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

猜你在找的C#相关文章