600 likes | 697 Views
第三章 ASP.NET 基础. 本章将介绍 :. ASP 的基础语法规则 VB 、 C# 的基本应用知识 简单的范例和基本应用. 3.1 ASP.NET 语法. 对结构的理解有助于网站和网页的建立。 常见的标签符号有: 标签<%%>、 Runat 、 object 注释 Page 指令、 import 指令 等等. 3.1.1 标签<%%>. 标签 <%%> 为目前流行的大多数的动态 Web 网页所支持 ASP 默认语言是 VBScript 执行标签 <%%> 中的程序代码将会生成动态的 Web 页面。
E N D
本章将介绍: • ASP的基础语法规则 • VB、C#的基本应用知识 • 简单的范例和基本应用
3.1 ASP.NET语法 • 对结构的理解有助于网站和网页的建立。 • 常见的标签符号有: • 标签<%%>、 Runat、object • 注释 • Page指令、import指令 • 等等
3.1.1标签<%%> • 标签<%%>为目前流行的大多数的动态Web网页所支持 • ASP默认语言是VBScript • 执行标签<%%>中的程序代码将会生成动态的Web页面。 • 见例程ch03_01 <% dim i as integer for i=1 to 4 %>
3.1.2标签Runat • 如果指定了某种语言,那么在<Script></script>中写的语言必须与声明的语言保持一致 • 语法: • <Script Language="C#“ Runat ="server"></script> • 表示使用的开发语言是C#,同时Runat指出了在服务器端运行。 • 见例程ch03_02
例程ch03_02中: • <Script></script>中定义了一个函数choose • 在<%%>内通过表达式userinfro=choose(userno)取得函数choose的返回值并传送给变量userinfro • 最后通过方法Response.write显示出来
3.1.3标签object • 以object标签形式建立类Class的语法为:<object … runat="server"/> • 例如使用object标签建立了一个structer类: <object id="items" class="system.collections.structer“ runat="server"/>
例程代码: <object id="items" class="system.collections.structer" runat="server"/> <script language="c#" runat=server> void page_load(object sender,eventargs e) { //items为object所建的structer类的实例 items.add("s"); items.add("n"); items.add("d"); items.add("f"); items.add("g"); mylist.datasource=items; mylist.databind(); } </script>
当然如果不用<object runat="server"/>标签也可以建立类structer • 使用new关键字是建立类实例最常用的方法 • 例如: structer items= new structer();
3.1.4注释 • ASP.NET中使用<%--注释--%>注释语句 • 例如: • <%-- • <itemtemplate> • wordlist:<%# container.dataitem%> • </itemtemplate> • --%> • 注释语句不会被执行,浏览器上不会显示任何内容
3.1.5 Page指令和3.1.6 import指令 • Page指令用来设置ASP.NET程序的个别属性 • import指令只有一个属性值——namespace
3.2 C#基础 • C#是Microsoft Visual Studio .NET的一部分 • C#将成为用于编写下一代窗口服务(Next Generation Windows Services,NGWS)应用程序的主要语言
3.2.1常量和变量 • 常量和变量是所有数据类型的载体 • 1.常量 • 所谓常量,就是在程序的运行过程中其值不能被改变的量。常量的类型可以是C#的任何一种数据类型。标准的常量声明格式如下: • 访问修饰符 const 常量数据类型 常量名=常量值; • 例如:public const double MYCONSTANT=1979.0; • 常量名一般使用大写字母。
2.变量 • 相对于常量,变量就是在程序运行期间其值可以改变的量。变量必须有变量名,在内存中必定占据一定的存储单元,并在此存储单元中存放变量的值。 • C#中变量名的命名规则如下: • 变量名必须以字母开头。在C#中变量命名规则中有一个特例,变量名可以以@符号开始。 • 变量名只能由字母、数字、下划线组成,不能包括空格、标点符号、运算符等特 殊符号。 • 变量名不能与C#中的关键字同名。 • 变量名不能与C#中的库函数名相同。
在C#中,可以将变量分为: • 静态变量 • 实例变量 • 数组元素 • 值参数 • 引用参数 • 输出参数 • 局部变量
3.2.2 C#的数据类型 • 在C#语言中共有以下两大类数据类型: • 值类型 • 引用类型 • 所有值类型的变量具有实际存在于内存中的值,也就是说当将一个值赋给变量时执行的是值拷贝操作,因此值类型必须初始化变量才可以使用。与之相对,引用类型只包含指向实际值的一个引用,赋值时只是将实际值的引用进行复制。
1.值类型 • C#的值类型分为3类: • 简单类型(Simple types)、 • 结构类型(Struct types)、 • 枚举类型(Enumeration types) • (1)简单类型 • C#的简单类型包含:整型、字符型(一种特殊的整型)、布尔型、浮点型、小数型。 • ◆ 整型:C#中有9种整型,如表3-3所示,给整型变量赋值方式例如:int x = 10; 。
(1)简单类型 包含:整型、字符型、布尔型、浮点型、小数型。◆整型:C#中有9种整型,见下表:
◆ 字符型(一种特殊的整型) • 字符型实际为单个的Unicode字符。单个Unicode字符为16位长。 • 例如: char myChar = 'A'; char chSomeChar='\x0065'; • char类型无法隐式地转换为其他类型。支持显式char转换: char myChar = (char)88; int myInt = (int)'M';
◆ 布尔型 • 布尔数据类型仅有true和false两值,即逻辑真和逻辑假。 • 可以直接将true 和false值赋给一个布尔变量,或将一个判断语句的结果赋给布尔类型的变量,例如, bool Test= true; bool flag =(100<110); //此时的flag值为true • 注意:与C和C++不同,0不再代表false,任何非零值也不再代表true。在C#中,bool类型的变量不能由其他类型的变量代替。
◆ 浮点型 • C#中有两种浮点类型:float(单精度浮点数)和double(双精度浮点数 • 变量赋值:float x=1.00001;
◆ 小数型 • 小数型在所有数值类型中精度有128位,使用它一般做精度要求高的金融和货币的计算。 • 取值范围大约为1.0x10^-28到7.9x×10^28 ,有28~29位的有效数字。 • 小数型变量赋值: decimal decMyValue = 1.0m; m代表是小数类型的1.0,否则将被编译器默认为double类型的1.0。 • 注意:decimal类型和double类型之间没有精确的隐式类型转换,从decimal转换成double可能造成精度丢失,从double到decimal则可能会产生溢出(由于double的取值范围比decimal大)。
(2)结构类型和(3)枚举类型 • 结构类型可以用来声明构造函数、常数、字段、方法、属性、索引、操作符和嵌套类型。使用结构的主要目的是创建小型的类。 • 枚举类型是由一组特定的常量构成一种数据结构。
2.引用类型 • 引用类型不存储实际数据,而存储实际数据的引用。 • C#中有以下引用类型:object类型、类、接口、代表元、字符串类型、数组。
◆ Object类型 • Object类型是所有类型的父类型,它是C#中所有其他类型的基类。正因为它是所有类型的父类,因此所有的类型的变量都可以赋给object类型的变量,例如: object myobj=10000.50; • 注意:C++程序员也许会将object理解为void*,这种理解是错误的。指针在C#中根本不存在。
◆ 类 • 类可以包含成员数据、成员方法甚至嵌套类。 • 成员数据包括常量、属性和事件。 • 成员方法包括方法、索引、操作符、构造函数和析构函数。 • 与C++的类相比,C#中仅允许单继承。
◆ 接口 • 接口与类的最大差异在于接口定义了抽象的方法和索引等,但在接口中并不实现这些抽象的方法和索引。 • 接口的作用是告诉继承它的类,这些方法是要实现的。
◆ 代表元 • C#中取消了指针的概念,但在C#中增加了一种名为代表元的数据类型,它实际上相当于函数指针。 • 例如,声明一个指向返回值为float类型的函数的代表元: • delegate float myDelegate(); • 可以用代表元指向函数,但它们的主要用途是拥有一个类事件。
◆ 字符串类型 • 字符串类型直接派生自对象类型,且它是final类,这意味着不能从它再派生类。 • C#增强了对字符串的各种操作。 • 例: 使用以下方式为字符串类型变量赋值: string myString="Hello world"; 使用以下方式合并字符串: string myString = "Hello" + " world"; 使用以下方式访问字符串中单个字符: char myChar = myString[6]; 使用"=="比较操作符来判断两个字符串是否相同。 if (thisString == thatString)
◆ 数组 • 数组是包含若干个相同类型的类型数据的集合。 • 所有数组的元素值通过数组名和下标来访问。 • 例: 一维数组(int myArray[10]) 二维数组(float myArray[10][10]) 三维数组(myPoint myArrary[10][10][10])。
数组初始化: string[] myArray={"C","C++","C#","Java"}; • string类型的一维数组: myArray[0]="C" • 使用以下方式声明数组而不初始化数组: int[] myArray=new int[1000]; • C#中数组的大小是变量: int nVar=5; int[] arrToo=new int[nVar];
3.类型转换 • C#中包括两种类型转换: 隐式类型转换和显式类型转换。 • (1)隐式类型转换 • 隐式转化就是系统默认的、不需要显式声明的转换。 • 隐式转换一定是安全的。 • 隐式类型转化包括以下3种类型:
◆ 隐式数值转换 • 隐式数值转化一般是将低精度的数值类型转换为高精度的数值类型。 从sbyte类型到short, int, long, double或decimal类型。 从byte类型到short, ushort, int, uint, long, ulong,float, double或decimal类型。 从short类型到int, long,float; double或decimal类型。 从ushort类型到int, uint, long, ulong, float, double或decimal类型。 从int类型到long, float, double或decimal类型。 从long类型到float, double或decimal类型。 从ulong类型到float, double或decimal类型。 从char类型到ushort, int, uint, long, ulong, float, double或decimal类型。 从float类型到double类型。
◆ 隐式枚举转换 • 隐式的枚举转换可以把整数0转换成枚举类型,但其他任何数都不可以。 • ◆ 隐式引用转换 • 从任何引用类型到object类型的转换。 • 从派生类到父类的转换。 • 从派生类到其所继承的接口的转换。 • 从派生接口到父接口的转换。
(2)显式类型转换 • 显式类型转换,又被称为强制类型转换,需要用户明确地说明转化的类型。 • 显式数值转换有以下3种类型: 显式数值转换 显式枚举转换 显式引用转换
◆ 显式数值转换 • 显式数值转换是指系统不存在相应的隐式数值类型转换规则,用户需要显式声明的数值类型转换。 • 例如: 从int到sbyte、byte、short、ushort、uint、ulong或char类型。 从uint到sbyte、byte、short、ushort、 int或char类型。 从long到sbyte、byte、short、 ushort、 int、uint、 ulong或eh盯类型。 从char到sbyte、byte或short类型。 从float到sbyte、 byte、short、 ushort、 int、 uint、 long、ulong、char或decimal类型。 从decimal到sbvte、bvte、short、 ushort、 int、 uint、 long、ulong、char、float或double。
◆ 显式枚举转换 • 显式枚举转换是指从数值类型或者另一个枚举类型转化到枚举类型,或者由枚举类型转换到数值类型。 • ◆ 显式引用转换 • 显式引用转换是指系统没有定义的需要用户声明的从一种引用类型到另一种引用类型的转换。 • 例如: 从object类型到任何引用类型的转换。 从父类到派生类的转换。 从类A到其继承的接口B的转换,等等。
4.装箱与拆箱 • 装箱与拆箱是C#引入的一类特别的类型转换。装箱是指从C#中任何的值类型到object类型的转换。拆箱是指从object到任何值类型的转换。 • ◆ 装箱操作 • 给一个值装箱是指隐式地把C#中任何类型转换成object类型对象。当一个值类型被装箱时,在内存单元中一个对象实例就被分配,且值被复制给新的对象。 • ◆ 拆箱操作 • 拆箱操作是显式类型转换。这意味着用户必须显式地声明,想将object对象转换成其他什么类型的对象。
◆ as操作符 • as操作符是C#定义的一个保证安全转换的操作符。使用as操作符执行显式转换,不会出现错误。即使无法完成转换,返回值将为null,而不会出现异常。as探作符只能用于引用类型。使用as操作符的格式如下: y=x as A (类型)
3.2.3 操作符与表达式 • 1.算术操作符和算术表达式 • C#提供了以下5种基本的算术操作符。 • +(加法操作符,或正值操作符,如3+4,+3) • 一(减法操作符,或负值操作符,如3-4,-4) • *(乘法操作符,如3*4) • / (除法操作符,如3/4) • %(求余操作符,如3%4)
2.赋值操作符和赋值表达式 • 赋值运算符用来给常量或者变量赋值 • 最简单的赋值运算符为”=”号 • 复合的赋值运算符包括: +=、-=、*=、/=、%=、&=、|=、^=、<<=、>>= 前5种是用于算术运算的,后5种用于位运算。 • 使用符合赋值运算符可简化程序, 提高效率,减小内存空间。 A+=B相当于A=A+B A-=B相当于A=A-B。 A*=B相当于A=A*B。 A/=B相当于A=A/B。 A%=B相当于A=A%B。
3.关系操作符和关系表达式 • 关系操作符是比较操作符,其返回值是true或者false。 • (1)常用比较操作符 • 有以下6种比较操作符: ==、 !=、 >、 < 、>=、 <= 例如: A==B,比较的两值相等,返回true,否则返回fasle A!=B,比较的两值不等,返回true,否则返回false A>B,如果A大于B,返回true,否则返回false A<B,如果A小于B,返回true,否则返回false A>=B,如果A大于或者等于B,返回true,否则返回false A<=B,如果A小于或者等于B,返回true,否则返回false
(2) is操作符 • 和C有所不同,在C#中定义了is操作符,其格式如下: A(值) is B(类型) • 它的意义为判断一个值是否是B类型,或者能否通过装箱、拆箱、引用转换成功地转换为B类型。如果是B类型,且可以成功地转换,则返回值为true,否则返回值为false。
4.逻辑操作符和逻辑表达式 • C#有3种基本的逻辑操作符:逻辑与、逻辑或及逻辑非: &&、 ||、 !
5.其他操作符 • (1)位运算符 包括: &与、| 或、^异或、~取补、<<左移、>>右移 • (2) 三元运算符 格式如下:A(判断条件) ? B(表达式1): C(表达式2) • (3) 自增、自减操作符 ++、-- • (4) new操作符 创建类、创建数组、创建代表元
(5) typeof操作符 用于返回系统包含的类对象的类型 • (6) checked和unchecked操作符 检查整型算术运算时结果是否溢出。 • (7) sizeof操作符 用于得到一个类型的字节数,
3.2.4 C#中的流程控制 • C#共有以下两类控制语句: 选择语句和循环语句 • 通过流程控制可以在程序中完成选择、循环控制,从而实现更多复杂的功能。
1.选择语句 • C#用了两个选择语句:if语句和switch语句。 ◆ if语句 • 标准的if语句的格式为: if(布尔表达式) { 内嵌语句1 } else { 内嵌语句2 }
◆ switch语句 通过控制表达式的值与选项的值比较,确定执行 • 标准的switch语句格式如下: switch(控制表达式) { case表达式值一: 内嵌语句一 case表达式二: 内嵌语句二 …… default: 默认执行语句 }