FxCop 的 ConstructorsShouldNotCallBaseClassVirtualMethods 规范

原创 2004年08月11日 21:46:00

FxCop 中有一个rule ConstructorsShouldNotCallBaseClassVirtualMethods
那如果在构造函数中调用Virtual方法可能会产生什么样的不良后果呢?
看如下代码:

public class BaseClass {
   public int intCount=0;
   public BaseClass() {
    Increate();
   }

   public virtual  void Increate(){
    intCount++;
   }

  }

  public class SubClass: BaseClass {

   public int subCount=0;
  
   public SubClass() {
    
     Increate();

   }
   public override void Increate() {
    subCount++;
   }

  }
private void button1_Click(object sender, System.EventArgs e)
  {
   SubClass xx=new SubClass();
   MessageBox.Show(xx.intCount.ToString() +"---"+xx.subCount.ToString()  );
  }
显示的结果是 xx.intCount 是 0;xx.subCount 是 2 ;

原因是 SubClass
Increate() SubClass() 被调用之前调用了。

以上代码编译后用FxCop分析,会报如下错误提示:
CriticalWarning, Certainty 95, for "ConstructorsShouldNotCallBaseClassVirtualMethods"
{
    Target     : ".ctor()"  (IntrospectionTargetConstructor)
    Location   : "file:c:/documents and settings/administrator.hrms-xam/my documents/visual studio projects/windowsapplication1/form1.cs(30)"  (String)
    Resolution : "'BaseClass..ctor()' contains a call chain that results
                 in a call to a virtual method defined by the class.
                 Review the following call stack for unintended consequences:
                 BaseClass..ctor()BaseClass.Increate(
                 )"
... ...
.ctor() 为构造函数。

FxCop 代码警察 对于dotNet开发者是非常有用的工具,至少它可以帮助你提高你的代码质量。

通过FxCop来验证.NET编码规范

最近研究了fxcop,有些心得,写出来分享一下。 FxCop介绍:     FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly进行检查。它使用基于规则...
  • dangercheng
  • dangercheng
  • 2013年12月03日 17:55
  • 630

代码分析工具Microsoft FXCOP

FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly(可称为程序集,assembly实际上指的就是.net中的.exe或者.dll文件(不包括netmodule文件...
  • wlanye
  • wlanye
  • 2014年12月22日 10:39
  • 840

FxCop - 代码分析工具

FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly(可称为程序集,assembly实际上指的就是.net中的.exe或者.dll文件(不包括netmodule文件...
  • afandaafandaafanda
  • afandaafandaafanda
  • 2014年12月01日 23:01
  • 493

Jenkins在.Net平台配置之代码质量管理

持续集成的核心思想就是在我们在开发中我们不断持续的集成我们的代码,确保我们的程序中的错误能及早的暴露出来。所以代码测试变的尤为的重要。Jenkins 作为我们搭建持续集成环境的核心工具,所以在Jenk...
  • gelupu
  • gelupu
  • 2014年08月31日 22:53
  • 3652

MySQL开发规范和原则大全

一、 表设计 库名、表名、字段名必须使用小写字母,“_”分割。库名、表名、字段名必须不超过12个字符。库名、表名、字段名见名知意,建议使用名词而不是动词。建议使用InnoDB存储引擎。存储精确浮...
  • xyw591238
  • xyw591238
  • 2016年05月25日 14:59
  • 1587

Java学习——传说中的13个规范

早就听说J2EE有十三个规范,可是看完视频我都没有发现有什么规范,这就让我纳闷了,都说学习java就是学习十三个规范,可是它到底是什么呢? 原来十三个规范就是十三个API文档,视频里讲到的都...
  • u010168160
  • u010168160
  • 2015年07月15日 07:58
  • 3582

理解AMD ,CMD,CommonJS规范

这是一篇关于javascript模块化AMD,CMD,CommonJS的学习总结,作为记录也给同样对三种方式有疑问的童鞋们,有不对或者偏差之处,望各位大神指出,不胜感激。 本篇默认读者大概知道req...
  • xcymorningsun
  • xcymorningsun
  • 2016年09月30日 10:33
  • 3819

Web前端规范文档-腾讯AlloyTeam

CSS语法 使用四个空格的 soft tabs — 这是保证代码在各种环境下显示一致的唯一方式。 使用组合选择器时,保持每个独立的选择器占用一行。 为了代码的易读性,在每个声明的左括号前增加一个空格。...
  • qinshenxue
  • qinshenxue
  • 2015年03月31日 10:56
  • 3537

java web项目开发编码规范

一、命名规范1.1 包命名包名称必须全部用小写。 命名方式:com.业务领域名.业务模块.业务子模块.系统分层 如com.hcepms.proj.ownerunit.dao ...
  • ytangdigl
  • ytangdigl
  • 2017年05月19日 10:40
  • 753

华为软件编程规范和范例

〔一〕=====[排版] ]=======  〔二〕======[注释]======= 〔三〕=====[标识符命名]======= 〔四〕=====[可读性]====== 〔五〕=====[...
  • minghuiw
  • minghuiw
  • 2014年07月06日 16:03
  • 1928
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:FxCop 的 ConstructorsShouldNotCallBaseClassVirtualMethods 规范
举报原因:
原因补充:

(最多只允许输入30个字)