查找疑难杂症--于细微处见精神

简介: 程序开发中,经常会出现一些很郁闷的问题,怎么看怎么不该有错,却有偏偏有错,其实错误往往在一些不经意的角落,甚至一些你认为“不可能错”的地方。我们经常会把一些如验证信息等功能写在一个页面基类中,但是这样的页面有时候总会在PageLoad里出问题,很郁闷的问题,如转换无效之类的,如果按照头痛医头脚痛医脚的方法,查出错的语句,往往怎么查都没错,查看所有代码,你会发现都没有错。福尔摩斯说过“如果所有的

程序开发中,经常会出现一些很郁闷的问题,怎么看怎么不该有错,却有偏偏有错,其实错误往往在一些不经意的角落,甚至一些你认为“不可能错”的地方。我们经常会把一些如验证信息等功能写在一个页面基类中,但是这样的页面有时候总会在PageLoad里出问题,很郁闷的问题,如转换无效之类的,如果按照头痛医头脚痛医脚的方法,查出错的语句,往往怎么查都没错,查看所有代码,你会发现都没有错。福尔摩斯说过“如果所有的其他可能都被排除,那么剩下的最后一种可能,无论多么离奇和难以置信,它都是真的”没错,查看了所有代码都没错,你还少看了哪里???对了,那些系统自动隐藏的,写着“窗体设计器生成的代码”的部分,的确是自动生成的代码错了,也许你看一眼,没错啊,平常都是这样的,都对啊。我们看看平常情况:

#region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {    
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

看不出有什么问题吧?其实这个时候是考验细心和对系统工作认识是否足够的时候。请注意这2句:

   InitializeComponent();
   base.OnInit(e);

请注意这里的base ,在平时,这个base是指向页面类的父类,即System.Web.UI.Page 那么在InitializeComponent();以后再执行OnInit,是没有问题的,不过现在页面类基类换成我们自己的页面基类,我们可能会在页面基类中执行一些操作,比如在PageLoad中~~

请注意,如果base.OnInit(e)没有在InitializeComponent()之前调用的话,所有页面基类Page_Load事件处理程序都将不会在当前页面上的Page_Load事件处理程序之前执行。这样的话,当前页面的Page_Load事件处理程序中如果用到页面基类的Page_Load事件处理程序中的实例化的类时,就会有出现问题。

错误最后找到了,恰恰是发生在“不可能错”的地方,系统自动生成的代码。

 

如果所有的其他可能都被排除,那么剩下的最后一种可能,无论多么离奇和难以置信,它都是真的

于细微处见精神

目录
相关文章
|
API 开发工具 图形学
从零开始的PICO教程(1)Pico游戏开发项目配置
这篇文章是PICO游戏开发的入门教程,详细介绍了如何注册成为PICO开发者、创建组织和应用、导入PICO的SDK、配置Unity项目以及完成项目设置的整个流程。
从零开始的PICO教程(1)Pico游戏开发项目配置
|
JavaScript 小程序 开发者
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
2040 0
|
计算机视觉
halcon系列基础之Scale_image_range
halcon系列基础之Scale_image_range
768 0
|
存储 安全 Linux
Linux 内核启动流程与入口函数分析
Linux 内核启动流程与入口函数分析
691 0
signin-入土为安的第十九天
signin-入土为安的第十九天
552 0
|
网络协议
BUUCTF easycap 1
BUUCTF easycap 1
336 0
|
人工智能 物联网 开发工具
移动应用的未来:跨平台开发与操作系统的融合
【2月更文挑战第29天】 在本文中,我们将探讨移动应用开发的最新趋势,特别是跨平台开发工具的崛起以及它们如何影响移动操作系统的生态。我们还将分析这些变化对开发者社区、用户以及整个移动技术产业的意义。
|
存储 机器学习/深度学习 人工智能
DeepSpeed + Kubernetes 如何轻松落地大规模分布式训练
DeepSpeed + Kubernetes 如何轻松落地大规模分布式训练
|
存储 SQL 运维
Dataphin跨租户发布功能简介
Dataphin提供两种项目模式:Basic简单模式和生产开发隔离的Dev-Prod模式。使用开发生产隔离的模式,可以提供代码及数据的生产开发环境隔离。然而在某些对安全性要求更高的场景(比如金融场景),客户需要对生产和开发环境进行物理的隔离。Dataphin的3.2新版本提供的跨租户发布功能也是为了满足该需求而发布。本文将介绍跨租户发布的基本流程及功能介绍
Dataphin跨租户发布功能简介
|
存储 监控 IDE
猪行天下之Python基础——1.3 Python开发IDE之PyCharm(下)
内容简述: 1、为什么要使用IDE? 2、PyCharm的下载安装 3、PyCharm的基本使用 4、PyCharm程序调试 5、共用全局的Python解释器
360 0