C#经典实践项目经验总结.docx
- 文档编号:29860081
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:35
- 大小:51.29KB
C#经典实践项目经验总结.docx
《C#经典实践项目经验总结.docx》由会员分享,可在线阅读,更多相关《C#经典实践项目经验总结.docx(35页珍藏版)》请在冰豆网上搜索。
C#经典实践项目经验总结
原価プロジェクト 知識
1.String与string的区别
string是c#中的类,String是.netFramework的类(在c#IDE中不会显示蓝色)
c#string映射为.netFramework的String
如果用string,编译器会把它编译成String,所以如果直接用String就可以让编译器少做一点点工作
如果使用c#,建议使用string,比较符合规范
string始终代表System.String(1.x)或:
:
System.String(2.0),String只有在前面有usingSystem;的时候并且当前命名空间中没有名为String的类型(class、struct、delegate、enum)的时候才代表System.String
string是关键字,String不是,也就是说string不能作为类、结构、枚举、字段、变量、方法、属性的名称,而String可以。
2.Convert.ToInt32();与Int32.Parse的区别
Convert.ToInt32()与int.Parse()的区别
(1)这两个方法的最大不同是它们对null值的处理方法:
Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常。
2)还有一点区别就是
a.Convert.ToInt32(doublevalue)
如果value为两个整数中间的数字,则返回二者中的偶数;即3.5转换为4,4.5转换为4,而5.5转换为6。
不过4.6可以转换为5,4.4转换为4
b.int.Parse("4.5")
直接报错:
"输入字符串的格式不正确".
c.int(4.6)=4
Int转化其他数值类型为Int时没有四舍五入,强制转换
int.Parse是转换String为int
Convert.ToInt32是转换继承自Object的对象为int的.
你得到一个object对象,你想把它转换为int,用int.Parse就不可以,要用Convert.ToInt32.
个人总结:
(1)Convert.ToInt32的参数比较多,Int.Parse只能转换string类型的.
(2)Parse就是把String转换成int,char,double....等,也就是*.Parse(string)括号中的一定要是string.
(3)Convert可以提供多种类型的转换,也就是Convert.*()括号中可以为很多种类型(包括string).
2.Subst命令的使用
Subst是DOS下的一个优秀的命令,它的可执行文件Subst.exe在C:
\Windows\system32文件夹下(此路径指windowsxp系统),其正规的中文名称应该是“给目录赋驱动器符命令”。
它的功能是以磁盘驱动器符代替路径名称,以使驱动器符与指定的子目录路径等效。
其命令格式很简单:
SubstDrive1Drive2Path,
substR:
"C:
\LiuProject\GenKaRun"
其中“Drive1”是指定替代磁盘路径的虚拟的新驱动器符,“Drive2Path”是指定所要替代的文件夹及其路径。
用户可以利用它将任意目录虚拟成一个磁盘驱动器,如果用户需要删除虚拟的盘符,可以执行SubstDrive1/D命令。
同时,并非所有的程序都可以正确使用Subst命令所生成的驱动器符,比如Format、Sys、Fdisk等一些如今还常用的命令,这些命令必须使用真实的驱动器,它们拒绝对Subst虚拟的驱动器进行操作。
对于网络磁盘驱动器,Subst命令也是无能为力的。
在dos命令提示符下执行subst命令虚拟增加的盘符,重启电脑或者注销电脑后,虚拟增加的盘符会消失,如果重启电脑或者注销电脑后盘符不消失,可以编辑批处理放在启动脚本里即可。
网上说的是编辑系统根目录下的AUTOEXEC.BAT文件,在我的电脑上试过了,不行的,也许与另有原因吧。
高级使用技巧
初步了解了Subst命令的用途及用法,不妨再看看它的一些高级使用技巧:
1.隐藏驱动器Subst的看家本领是虚拟磁盘驱动器符,虽然微软建议用户采用没有使用的盘符进行虚拟,但并不表示它不能虚拟已经存在的盘符,比如A盘、C盘等。
于是用户可以通过Subst命令虚拟A、C等盘符,直接覆盖这些已经存在的盘符,使他人无法看到该盘的真正内容,以达到隐藏真实驱动器的目的。
例如,用户先在D盘根目录下创建一个名为“Aaa”的文件夹,最好将文件夹的属性设置为“只读”和“隐藏”。
然后在C盘根目录下打开“Autoexec.bat”文件,加入以下代码:
@EchoOffC\Windows\system32\SubstAD\Aaa这样每次在系统启动后软盘的图标就变为硬盘的样子,其中的内容也变了,从而实现偷梁换柱的目的。
需要还原的时候,只需在MS-DOS方式下,运行“SubstA/D”就行了。
2.特殊软件的安装有少数软件在安装时会提示需要从A盘中提取安装信息,这时难道只有将文件拷贝到软盘后再安装吗?
完全没有这个必要,Subst命令可以“欺骗”这些需要用软盘安装的软件。
用户把软盘中的文件全部拷贝到硬盘上的任意文件夹中,再将该文件夹用Subst命令虚拟成A盘后,即可顺利安装。
3.模拟光盘自动运行目前大部分多媒体光盘都带有一个自动运行命令,方便了用户的使用。
然而若将光盘上的所有内容全盘拷贝到硬盘上就不能正常运行。
这时,用户可以将放置光盘内容的文件夹虚拟成光盘驱动器(SubstFD\Guangpan,假设F为光驱),则软件能正常运行。
3.ASP.NETUseSubmitBehavior属性
如果该控件使用了客户端浏览器的提交机制,则为true;否则为false。
默认值为true。
当UseSubmitBehavior属性为false时,控件开发人员可以使用GetPostBackEventReference方法来返回Button的客户端回发事件。
GetPostBackEventReference方法返回的字符串包含客户端函数调用的文本,可以插入到客户端事件处理程序中。
4.Button控件的onclick、oncommand、commandname、CommandArgument的区别
.Button控件
Button控件在执行后被解析为
举两个Button控件的例子。
<%@PageLanguage="C#"%>
publicvoidButton_Click(Objectsender,EventArgse)
{
stringargName=((Button)sender).CommandName;
//sender为一个对象,故CommandArgument为string
stringargArg=((Button)sender).CommandArgument;
Label1.Text="您选中的动作为:
}
Button控件演示
Buttonid="Button1"CommandName="踢"CommandArgument="足球"Text="动作1"runat="server"OnClick="Button_Click"/> Buttonid="Button2"CommandName="打"CommandArgument="篮球"Text="动作2"runat="server"OnClick="Button_Click"/> Labelid="Label1"runat="server"/> //////////////////////////////////// <%@PageLanguage="C#"%> publicvoidButton_Click(Objectsender,CommandEventArgse) { stringargName=e.CommandName; //CommandEventArgsr为一个类,故CommandArgument.ToString(); stringargArg=e.CommandArgument.ToString(); Label1.Text="您选中的动作为: }
Button控件演示
Buttonid="Button1"CommandName="踢"CommandArgument="足球"Text="动作1"runat="server"OnCommand="Button_Click"/> Buttonid="Button2"CommandName="打"CommandArgument="篮球"Text="动作2"runat="server"OnCommand="Button_Click"/> Labelid="Label1"runat="server"/> 分析: 1.两个程序用不同的方法完成相同的功能和效果。 2.类CommandEventArgs有两个公共属性,CommandName(用来获取命令的名称)和CommandArgument(用来获取命令的参数)。 二者相互关联。 3.两个程序分别用OnClick与OnCommand激发事件,区别在于OnCommand是带值传递的。 4.所有Button类的Web控件(如ImageButton,LinkButton)均含有CommandName和CommandArgument这两个属性。 问题: 上文中两个程序采用的参数CommandEventArgs,EventArgs有什么区别? 为什么在第一个程序中使用EventArgs,而不能使用CommandEventArgs(已经验证,出现“Button_Click”的重载均与委托“System.EventHandler”不匹配)? 例子: 解决: 在网上查资料得到的结果: 这类问题出现的原因就是在控件的一些事件里面调用了函数,而这些函数的参数与该事件所要用到的参数类型不一致。 在MSDN中搜索OnPageIndexChanging、OnPageIndexChanged等关键字就可以得到: C# protectedvirtualvoidOnPageIndexChanged(EventArgse) C# protectedvirtualvoidOnPageIndexChanging(DetailsViewPageEventArgse) C# protectedvirtualvoidOnRowDeleting(GridViewDeleteEventArgse) C# protectedvirtualvoidOnRowDeleted(DataRowChangeEventArgse) 这样,在何种事件中使用什么样的参数类型就一目了然了。 还有后面的OnRowDeleted、OnRowDeleting也是同样的道理。 相应事件: publicvoidMyList_Page(objectsender,GridViewPageEventArgse) publicvoidMyDataGrid_Delete(Objectsender,GridViewDeleteEventArgse) 5.关闭子窗口刷新父窗口,并且走进! IsPostBack 用window.open()打开子窗口时,刷新父窗口 window.opener.location.href=window.opener.location.href; window.close(); window.showModalDialog和window.open关闭子页面时刷新父页面 父窗体打开页面的javascript function GoToPage(id) { var title="title"; var url="xxxxx.aspx? ID="+id+"&Radom="+Math.random();; var Width="700"; var Height="600"; var arguemnts = new Object(); arguemnts.window = window; if (document.all&&window.print) { window.showModalDialog(url,arguemnts,"dialogWidth: " + Width + "px;dialogHeight: " + Height + "px;center: yes;status: no;scroll: yes;help: no;"); } else { window.open(url,"","width=" + Width + "px,height=" + Height + "px,resizable=1,scrollbars=1"); } } 子页面执行代码后: Response.Write(""); Response.Write(""); 如果是window.open打开的: Response.Write("") ; Response.Write(""); 6.关闭当前页面时刷新父页面最终解决办法 由于某种原因,原来页面里或项目的关闭子窗口刷新父页面的方法在有的项目里不好用。 现在介绍一种在.net中的万能方法。 1.在父页面中加一个隐藏的LinkButton(好像只有LinkButton会产生: __doPostBack()事件),不用设置它的Visible属性,只需把它显示的文字清空,如下所示: linkbuttonid="btnFresh"tabIndex="-1"Runat="server"> linkbutton> 2.在这个LinkButton的单击事件中写你要处理的事情,如下所示: protectedvoidbtnFresh_Click(objectsender,EventArgse) { 你要处理的事情; } 3.在父页面的Page_Load事件中写: btnFresh.Attributes.Add("onfocus","javascript: __doPostBack('btnFresh','');") 当Linkbutton获得焦点时触发单击事件 4.在父页面中写如下JS -- functionopenwin(budgetyear,budgetitem,department) { //弹出模态窗口 varurl="budget/budget_share2_share_e.aspx? budgetyear="+budgetyear+"&budgetitem="+budgetitem+"&department="+department; varoption="dialogHeight: 500px,center: yes;status: no;help: no;"; varresult=window.showModalDialog(url,option); if(result=="OK")//子页面里的window.dialogArguments.returnValue='OK' { document.all["btnFresh"].focus();//这样保证在子页面关闭时就给父页面的Linkbutton复了焦点,从而触发Linkbutton的单击事件 } } 5.在子页面里的[确定]按钮事件的最后面写上 stringstrReturn=" strReturn+="window.dialogArguments.returnValue='OK';window.close()";strReturn+=""; this.Page.RegisterClientScriptBlock("",strReturn); Response.Expires简述 默认情况下,ASP禁止了浏览器和代理的缓冲功能。 如果有一个每次都不要更新的页面,就应该打开 浏览器和代理的缓冲,这将允许浏览器和代理在一段时间内使用该页面的“缓冲”拷贝数据。 缓冲能够 大大地减轻服务器的数据转载量,并提高用户的浏览性能。 哪些类别的动态页面适合被缓存呢? 下面是一些例子: 天气页面,每5分钟更新一次 新闻或版本列表页面,每天更新2次 注意: 使用浏览器或者代理缓存后,对Web服务器的点击次数就会减少。 如果想精确地了解所有页面 ,或者对于邮递广告,就不适于使用浏览器和代理缓存了。 浏览器缓存由HTTP“Expires”头参数控制,它由Web服务器发送给浏览器。 ASP提供了2个简单的方 法发送这个头部参数。 设置页面在未来一定时间内到期,可以使用Response.Expires属性。 下面的例子 将告诉浏览器内容在10分钟后过期: <%Response.Expires=10%> 设置Response.Expires为负数或者0,就禁止了缓存。 对第2个属性Response.ExpiresAbsolute的设 置,允许指定在一个特殊时间到来时内容过期。 <%Response.ExpiresAbsolute=#May31,200113: 30: 15#%> 除了使用Response对象来设置到期时间,还可以在HTML文件头部写标记。 尽管代理不会注 意到这个标记,但是一些浏览器可以。 30: 15"> 最后,对于HTTP代理,使用Response.CacheControl可以指示是否缓存内容。 设置属性为“Public” ,打开代理缓存内容的功能。 <%Response.CacheControl="Public"%> 默认情况下,这个属性是设置成“Private”的。 注意: 不要让代理缓冲那些显示给特定用户的页面 ,因为代理可能会将属于其他用户的页面送给当前用户。 用basetarget=self(转载) 在创建或修改布局复杂Asp.Net服务器端控件时,大量的时间都是在编译,等待JIT,修改,编译,JIT...这样一个循环中,而且两个编译常常还很耗费时间。 特别地,当控件已集成在页面之中后,在出现一些布局效果上的小偏差,再调整起来将是一个非常无趣和耗时的工作。 而这时如果能直接修改已输出的Html,很可能会更加迅速的找到问题所在。 但是不幸的时,通过浏览器SaveAs出来的html代码显然是不太具有修改价值的。 因为本来就只是要进行细微的布局调整,而SaveAs出来页面新的布局问题可能比本身要解决的问题更加严重。 那么就直接通过ViewSource把代码copy出来存为html文件呢? 这时后我们会发现页面里面所有通过相对路径定位的资源都回丢失,比如什么图片啊,javascript啊等等,缺失了这些东西,页面也就同样失去了再调整编辑的价值。 在HTML中,有一个base标签,这个元素似乎只在模态窗口提交页面避免弹出新窗口的时候,有用到过,平时似乎很少有看到网页用这个元素。 殊不知这个base在调试html代码时,非常有用。 比如你的ASP.NET页面是Source把它的html代码在本地存为: index.htm文件,只用再在其 我们再打开这个index.htm时,会发现这时和打开
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 经典 实践 项目 经验总结