Day 1
初识ASP.NET
<form runat="server">
State:<asp:DropDownList id="state" runat="server"/>
<asp:Button Text="Show Authors" OnClick="ShowAuthors" runat="server"/>
<p/>
<asp:DataGrid id="DataGrid1" runat"server"/>
</form>
此处有一个标有runat="server"属性的表单,这表示告诉ASP.NET改表单将返回数据以便在服务器代码中使用.在表单中DropDownList(等同于HTML SELECT列表),Button(等同于一个HTML INPUT type="button"),以及一个用来显示信息的DataGrid.其中的按钮使用OnClick事件来鉴别服务器端代码的名称,以便当用户单击它时运行这些代码.值得注意的是,这里的OnClick事件不是客户端的DHTML的OnClick事件.由于该控件是一个服务器端的控件(runat="server"),因此事件会在服务器端的代码中被该控件作用.
If Not Page.IsPostBack Then
state.Item.Add("CA")
...
End If
Web Control 一个很重要的特点就是他们在页面发送的过程中会保留其内容,因此我们不用再次对他们进行填充.IsPostBack特性允许我们鉴别页面是否是首次加载的,或者是否我们已经返回数据给服务器了.
认识.NET Framework
.NET Framework 内容丰富,主要几个部分:
1 在该平台上可编写识别Internet并在Internet上支持的应用程序,并且这些应用程序接受诸如XML,HTTP和SOAP这样的开放标准.
2 提供了一些非常重要并且强大的应用程序开发技术,例如可用来创建典型GUI应用程序的windows forms, 当然也包括用于创建网格应用程序的ASP.NET.
3 包含了一个范围广泛的类库,该类库可为数据访问(关系型和XML),目录服务,消息对列等提供广泛支持.(到目前为止我对目录服务和消息队列还比较陌生)
4 该平台有一个基类库,该类苦包含了数百个类,他们用来执行象文件操作,注册表访问,安全,线程以及利用正则表达式搜索文本这样的常规任务.(正则表达式??)
5 不存在语言歧视性,可以很公平的支持任何语言.
6 具有向下兼容性,它为您或第三方使用COM或标准DLL编写的现有组件提供了很好的互用性支持.
7 改平台有一个称之为公共语言运行时,CLR运行独立的代码运行和管理环境.CLR确保代码的安全执行,同时它还在操作系统之上提供了一个抽象的层,这表明.NET Framework 中的各元素均可以在多种操作系统和设备上运行.(此处本人有些疑问!!)
名称空间有以下两个主要功能:
1 对相关类型进行逻辑分组:例如,System.Web包含了所有管理Web请求的低级执行的ASP.NET类.而System.Web.UI包含了所有实际显示UI的类,同时System.Web.Hosting 包含了帮助在IIS或其它应用程序中主控ASP.NET的类.
2 减少名称冲突
注: 名称空间不对类型进行物理分组,这是因为一个名称空间可以在不同的装配件中(DLLs和EXEs)
ASP.NET自动地把常用地名称输入到ASP.NET页中.
可以将名称空间当作目录来理解.不过他们包含的是类而不是文件.但是一个称为A.B的名称空间并不意味着一定存在一个名为B的名称空间.
公共语言规范(comman language specification,cls)
类型
System.Boolean
System.Byte 表示无符号的字节值(0-255之间的正整数)
System.Char UNICODE字符值
System.DateTime 数据和时间值
System.Decimal 用28个重要的数字表示正负值
System.Double 64位,双精度的浮点数字
System.Int16 16位的带符号整数值
System.Int32 32...
System.Int64 64...
System.Sbyte 8位的带符号整数(-128~127)
System.Single 4位,单精度的浮点数字
System.TimeSpan 时间段,或正或负
System.String UNICODE字符串
System.Array 一维数组
System.Object 所有其他类型继承的基本类型
值类型:分配到堆栈中的空间,如基本类型
引用类型:分配到可管理CLR堆中的空间,如对象类型
封箱:
//c#
int i= 32;
object o = i;//堆栈中的值类型的内容被复制到可管理堆栈中分配的内存中.而创建的引用类型包含 //了一个改值类型的副本,且可由其他要求object引用的类型使用.包含在值类型中的 //和创建的引用类型是完全不相关的(除非它们包含了相同的值(如何理解???)),如果修改 //了原来的值类型,引用类型也不会受到影响.
拆箱:
//c#
object o;
int i = (int)o;
//假设变量o已经初始化
拆箱时,可管理堆中的内存被复制到堆栈中
注:真正理解封箱和拆箱是很重要的,因为它涉及到性能问题