一个VS.net自动生成代码引发的问题
2005-11-11 22:24
761 查看
最近在用C#写个项目,其中有的页面要从一个页面基类继承该类生成页面。但是该基类是项目组中一个朋友写的。在继承该类生成页面是发生了“指定的转换无效”无效的错误,由于我的页面代码部分自以为没有错(因为在没有继承该页面基类之前编译运行没有问题),看了好久都没发现问题,第二天问基类的作者,他说会不会是VS反射机制出了问题,我也搞不清楚了。只是知道我的继承页面的代码部分一句是用到两个强制类型转换:一个基类中实例化的类和(int),开始以为问题出在这上面。
但是,查了网上一些资料,包括博客堂里关于“指定的转换无效”方面的文章还是没有找到原因。
后来,看了看页面基类的内容,我发现我在继承页面上强制类型转换的同时还要用到基类中使用的一个类。好在他给我继承页面基类而来的两个页面都是没有问题的,只是他VS是英文版的。无意中看到它的页面中VS自动生成代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
base.OnInit(e);
InitializeComponent();
}
中base.OnInit(e); InitializeComponent();的顺序与我的自动生成代码中的顺序正好相反。我把我的页面中的自动生成代码的相应代码顺序调整为与其一致。
base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法。 指定创建派生类实例时应调用的基类构造函数。
如果base.OnInit(e)没有在InitializeComponent()之前调用的话,所有页面基类Page_Load事件处理程序都将不会在当前继承页面上的Page_Load事件处理程序之前执行。这样的话,当前继承页面的Page_Load事件处理程序中如果用到页面基类的Page_Load事件处理程序中的实例化的类时,就会有出现问题,在我的这个项目中就体现在“指定的转换无效”上,不是由于(int)引起的。后来考虑做基类的朋友也是参考现成的代码,不应该英文版的就能在自动代码的生成顺序上就智能些吧。同时以后在继承页面基类时一定要注意修改自动生成代码,不知道VS2005里面是否改进了。
我做了一个简单的示例,两个类文件:一个页面基类BasePage.cs和一个AboutClass.cs,一个NewName.aspx继承于页面基类的页面。
通过改变自动生成代码base.OnInit(e),InitializeComponent()的顺序就会发现有以下两种不同结果。
图1
图2
demo程序下载:/Files/brinksman/Initialize.rar
但是,查了网上一些资料,包括博客堂里关于“指定的转换无效”方面的文章还是没有找到原因。
后来,看了看页面基类的内容,我发现我在继承页面上强制类型转换的同时还要用到基类中使用的一个类。好在他给我继承页面基类而来的两个页面都是没有问题的,只是他VS是英文版的。无意中看到它的页面中VS自动生成代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
base.OnInit(e);
InitializeComponent();
}
中base.OnInit(e); InitializeComponent();的顺序与我的自动生成代码中的顺序正好相反。我把我的页面中的自动生成代码的相应代码顺序调整为与其一致。
base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法。 指定创建派生类实例时应调用的基类构造函数。
如果base.OnInit(e)没有在InitializeComponent()之前调用的话,所有页面基类Page_Load事件处理程序都将不会在当前继承页面上的Page_Load事件处理程序之前执行。这样的话,当前继承页面的Page_Load事件处理程序中如果用到页面基类的Page_Load事件处理程序中的实例化的类时,就会有出现问题,在我的这个项目中就体现在“指定的转换无效”上,不是由于(int)引起的。后来考虑做基类的朋友也是参考现成的代码,不应该英文版的就能在自动代码的生成顺序上就智能些吧。同时以后在继承页面基类时一定要注意修改自动生成代码,不知道VS2005里面是否改进了。
我做了一个简单的示例,两个类文件:一个页面基类BasePage.cs和一个AboutClass.cs,一个NewName.aspx继承于页面基类的页面。
通过改变自动生成代码base.OnInit(e),InitializeComponent()的顺序就会发现有以下两种不同结果。
图1
图2
demo程序下载:/Files/brinksman/Initialize.rar
相关文章推荐
- 让VS.Net根据表结构自动生成界面和C#代码
- Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展
- VS2013中web项目中自动生成的ASP.NET Identity代码思考
- 去掉asp.net自动生成的垃圾代码的一个类
- VS2013中web项目中自动生成的ASP.NET Identity代码思考
- asp.net mvc 的webApi (二)vs自动生成的问题
- VS.NET 自动生成版本号问题
- 去掉asp.net自动生成的垃圾代码的一个类,
- idea使用generator插件自动生成代码工具遇到的问题
- 定义一个以is开头的全局变量利用IDEA的Getter and Setter自动生成get跟set方法出现的问题
- 从数据到代码-基于T4的VS代码自动生成方式
- VS2010 使用时选择代码或双击时出错,点击窗口按钮后VS自动重启问题
- 一个自动生成验证码的代码
- 改写的一个自动生成图片验证码的类asp.net(vb)
- 章鱼哥—VB.NET 如何实现代码自动生成控件 添加绑定事件
- Asp.net自动生成三层代码视频教程
- vs的快捷键包含部分代码的自动生成
- ASP.NET 4.0 ListView等容器控件中获取ClientID值与HTML中自动生成ID字符串不一样问题。
- VS.Net开发必备,让您的代码自动收缩,如何实现!
- 关于VS2013代码自动折叠的问题