.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
FxCop 的 ConstructorsShouldNotCallBaseClassVirtualMethods 规范

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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开发者是非常有用的工具,至少它可以帮助你提高你的代码质量。




相关文章

相关软件