一直做Java web开发,但这段时间因工作需要,把.net和php也看了下.
既然如此,决定把.net ,java,php以及Flex/Ext都扫荡一遍.当然重点还是Java
1.Aspx网页始终被编译成.net类,并保存在程序集中,再次访问时只需要执行编译了的类. (和jsp相同).
2.Aspx网页类从Page基类派生而来.Page基类提供了状态管理工具,如Cache,Session,Application,Response,Request等.
C#中Page定义如下:
public class Page : TemplateControl, IHttpHandler
Page类继承TemplateControl类,实现了IHttpHandler接口.
3.代码隐藏:创建中间基类,让中间基类从Page类派生,aspx的生成的类从中间基类派生.
方法:设置Page指令的Inherits属性或者src属性.
ps:可以把初始化代码放入中间基类的构造函数中.
4.Page类的事件序列(见篇三)
5.对于客户端的每个请求,都由Page类的一个新实例来处理.
6.ado.net 中
IDbConnection (实现类OleDbConnection/SqlConnection) 接口对应Java的Connection 口
IDbCommand (实现类OleDbCommand/SqlCommand) 接口对应Java的
Statement/PreparedStatement/CallableStatement接口
IDataReader (实现类OleDbDataReader/SqlDataReader) 接口对应Java中的ResultSet接口
7.asp.net中的数据绑定可以使用 DataReader 或者 DataSet
这是基于两种数据库访问模式,连接模式和非连接模式.
8.服务器端求值语法<%= %>,服务器端脚本语法<% %> (jsp相同)
9.请求url进入服务器后,最终由Page类的ProcessRequest方法处理(Page类实现了的IHttpHandler接口方法)
在传统的MVC模式开发中,Java里面常用Servlet作为Controller,对应在.Net中,可以通过实现IHttpHandler接口来起Controller作用.
10.HttpContext维护所有与请求相关的数据
可以通过HttpContext以公共属性形式访问
Application(HttpApplicationState),
Session(HttpSessionState),
Request(HttpRequest),
Response(HttpResponse),
Server(HttpServerUtility)//HTTP服务器对象,
Items(IDictionaty)//每请求属性包
ex. HttpContext context = HttpContext.Current;
HttpRequest request = context.Reqeust;
HttpResponse response = context.Response;
11. post方法:Request.Form["textname"];//取值
get方法: Request.QueryString["textname"];;//取值
控件后面加上 runat="server"
12.让代码支持折叠显示
#region 代码段的描叙
#endregion
13.类型转换: (变量类型)变量名(和Java一样);Convert类;各种类型的Parse方法
14.属性的setter/getter
public String name{
get{ return name;}
set{ name = value;}
}
15.普通集合(using System.Collections)/泛型集合(using System.Collections.Generic)
ArrayList/List<T>,Hashtable/Dictionary<K,V>
16.Page有个属性IsPostBack(是否页面回发),在用户单击某个按钮导致页面回发时,可以在Page_Load()方法中通过这个属性来判断页面是否是第一次加载,从而避免再次初始化控件
ex. if(!IsPostBack){ //初始化操作}
17. C#中的继承和实现都用用":", 不管是继承类还是实现接口
18.C#中遍历
ex. String myString;foreach(char a in myString){} //遍历字符窜
String[] strArray;foreach(String str in strArray){} // 遍历数组 java : for(String str:strArray){}
List<int> list; foreach(int a in list){} //遍历list
19.参数数组 params
ex: int SumVals(params int[] values){ } //该方法接受任意个int或者不接受任何参数
等价于java中 int SumValse(int... values){ }
20.C#函数中分为值参数(默认)和引用参数(ref关键字)
ex. showDouble(ref int val){ val*=2; }
int num=5;
showDouble(ref num);//注意调用格式
//此时num的值为10
21.out关键字,执行方式和引用参数一样,函数执行完后,该参数的值将返回给函数调用中使用的变量.
ex:showDouble(int val,out int idx){ val*=2; idx = val;}
int num =5;
int result;
showDouble(num,out result);
22.List的索引访问( [])
ex. List<int> list= new List<int>();
list.add(1);list[0]
23.和Java类似,String和Object是引用类型,简单变量(如int,double)和所有结构等是值类型(Java中叫基本类型)
c#: value and reference types;
java: primitive and reference types
C#中所有数据类型都是System.Object的子类,包括引用类型和值类型. 两种预定义的引用类型:string和object
C#中一般不用太区分值类型和引用类型(必要时,由于拆箱和装箱机制,基本类型会被转换成引用类型)
24.泛型的约束定义,约束必须出现在继承说明符号后
ps:泛型用法基本与Java类似
ex.class MyClass<T1,T2> :MyBase,MyInterface where T1:constraint1 where T2:constraint2
25.F11单行调试,F5跳入方法;CTRL+F5执行程序(VS2005)
26.Java中参数传递只有值传递;C#中参数传递有 值传递(默认) 和 引用传递(ref 关键字).
所谓的值传递是传递 实际参数 的一个拷贝,需要在内存中另分配存储空间.
如果参数是基本类型(c#值类型),则传递 实际参数 的值的一个拷贝;如果是引用类型则传递 实际参数 的引用的一个拷贝。
所谓的引用传递是指传递实际参数在内存中的实际地址,不需要另分配存储空间.
27. 遍历客户端提交的请求参数(Post方法)
foreach (String s in Request.Form){
System.Console.WriteLine(Request.Form[s]);
}
28.格式化货币
System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US"); //美元$
String moneyCount = String.Format(MyCulture,"{0:C}",money);