[教学课题]
ASP.NET的相关语法
[教学目标]
1.知识目标:
(1)了解数据类型。
(2)掌握常量和变量使用方法。
(3)掌握类型转换的方法。
(4)掌握运算符及表达式。
(5)掌握字符串处理的方法。
(6)掌握流程控制。
(7)掌握数组的定义与使用方法。
2.技能目标:掌握C#语言的基本操作方法、字符串处理的方法。
3.德育目标:通过教学激发学生探索学习的主动性。
[重点难点]
1.教学重点:常量和变量使用方法。
2.教学难点:流程控制、数组。
[教学方法]
讲授法+直观演示法+任务驱动法
[教学手段]
多媒体课件+课堂直观演示+课堂练习
[教学时数]
4课时,其中理论2课时、实践2课时
[教学内容]
一、导语设计(培养学生学习兴趣,引入新课)
[此处为情景法将学生导入课程]
二、授课内容(突出重点、化解难点)
一、数据类型。
1、值类型
值类型表示实际的数据,存储在堆栈中。将一个值类型变量赋给另一个值类型变量时,将复制包含的值,对其中一个变量操作时,不影响其他变量。C#中的多数基本类型都是值类型。值类型包括简单类型、枚举类型和结构类型。值类型结构如图所示。
| 类 别 | 位 数 | 类 型 | 范围/精度 |
| 有符号整型 | 8 | sbyte | -128~127 |
| 16 | short | -32768~32767 | |
| 32 | int | -2147483648~2147483647 | |
| 64 | long | -9223372036854775808~9223372036854775807 | |
| 无符号整型 | 8 | byte | 0~255 |
| 16 | ushort | 0~65536 | |
| 32 | uint | 0~4294967295 | |
| 64 | unlong | 0~18446744073709551615 | |
| 浮点 | 32 | float | ±1.5e-45~±3.4e38 |
| 64 | double | ±5.0e-324~±1.7e308 | |
| Decimal | 128 | decimal | ±1.0×10e-28~±7.9×10e28 |
| Unicode字符 | 16 | char | U+0000~U+ffff |
| 布尔值 | bool | true/false |
2、引用类型
引用类型表示指向数据的指针或引用,可存储对实际数据的引用。引用类型在内存中的存储位置仅包含堆上对象的地址的引用。引用类型为null时,表明没有引用任何对象,引用类型包括类、接口、数组和字符串。引用类型结构如图所示。
3、装箱和拆箱
装箱是从值类型到引用类型的转换,而取消装箱(即拆箱)是从引用类型到值类型的转换。使用拆箱可以像操作简单类型一样操作复杂的引用类型,这是C#非常强大的功能。
在装箱和拆箱过程中,任何值类型都可以被当作object引用类型来看。
int i=11;
object o=i;//装箱
int j=(int)o;//取消装箱

二、常量和变量使用方法。
1、常量
常量也称为常数,是在编译时已知并在程序运行过程中其值保持不变的量。常数被声明为字段,声明时在字段的类型前面使用const关键字。常数必须在声明时初始化。例如:
public const int hour=24;
常数必须属于整型(sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool 或string)、枚举或对null的引用。
可以同时声明多个相同类型的常数,并且只要不会造成循环引用,用于初始化一个常数的表达式就可以引用另一个常数。例如:
public const int hour=24 ,min=hour*60;
常数可标记为public、private、protected、internal或protectedinternal,这些访问修饰符定义了用户访问该常数的方式。
2、变量
变量是指在程序运行过程中其值可以不断变化的量。变量通常用来保存程序运行过程中的输入数据、计算获得的中间结果和最终结果。
使用变量前必须对其进行声明。变量可以保存某个给定类型的值。声明变量时,还需要指定它的名称。如果把内存比喻成一个仓库,那么变量可以看成是这个仓库中用于保存值的盒子。选择大小合适的盒子才能保存数据,这就是确定数据类型。选择到了合适的盒子,还要给盒子签名以便能够找到这个盒子,这就是给变量命名。
声明变量的形式如下:
AccessModifier DataType VariableName;
| 访问修饰符 | 描 述 |
| public | 使成员可以从任何位置访问 |
| protected | 使成员可以从声明它的类及其派生类内部访问 |
| private | 使成员仅可从声明它的类内部访问 |
| internal | 使成员仅可从声明它的程序集内部访问 |
变量名不能与任何C#关键字同名。例如:
int i=0; //正确
intint=0; //错误
变量只能保持一种类型的值。例如,如果一个变量声明为数值类型,则无法再用其保存字符串类型的值。
int i=123;
i="123"; //错误
三、类型转换的方法。
1、隐式类型转换
隐式类型转换是指不需要声明就能进行的转换。进行隐式类型转换时,编译器不需要进行检查就能安全地进行转换,下表列出了可以进行隐式类型转换的数据类型。
| 源 类 型 | 目 标 类 型 |
| sbyte | short、int、long、float、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 |
| uint | long、ulong、float、double 或 decimal |
| char | ushort、int、uint、long、ulong、float、double或decimal |
| float | double |
| ulong | float、double或decimal |
| long | float、double或decimal |
2、显式类型转换
显式类型转换也可以称为强制类型转换,它需要在代码中明确地声明要转换的类型。如果在不存在隐式转换的类型之间进行转换,就需要使用显式类型转换。下表列出了需要进行显式类型转换的数据类型。
| 源 类 型 | 目 标 类 型 |
| sbyte | byte、ushort、uint、ulong或char |
| byte | sbyte和char |
| short | sbyte、byte、ushort、uint、ulong或char |
| ushort | sbyte、byte、short或char |
| int | sbyte、byte、short、ushort、uint、ulong或char |
| uint | sbyte、byte、short、ushort、int或char |
| char | sbyte、byte或short |
| ulong | sbyte、byte、short、ushort、int、uint、long或char |
| long | sbyte、byte、short、ushort、int、uint、ulong或char |
| double | sbyte、byte、short、ushort、int、uint、ulong、long、char或decimal |
| float | sbyte、byte、short、ushort、int、uint、long、ulong、char或decimal |
四、运算符及表达式。
1、算术运算符与算术表达式
算术操作符包括“*”、“/”、“%”、“+”和“-”,用算术操作符把数值连接在一起的、符合C#语法的表达式称为算术表达式。算术运算符及算术表达式的详细说明如表所示。
| 运 算 符 | 说 明 | 操 作 数 | 表 达 式 | 值 |
| + | 加法运算符 | 二元 | 3+4 | 7 |
| - | 减法运算符 | 二元 | 3-4 | -1 |
| * | 乘法运算符 | 二元 | 3*4 | 12 |
| / | 除法运算符 | 二元 | 9/3 | 3 |
| % | 模运算符 | 二元 | 9%2 | 1 |
2、关系运算符与关系表达式
关系运算符包括“==”、“!=”、“<”、“>”、“<=”和“>=”等。用关系操作符把运算对象连接起来,符合C#语法的式子称为关系表达式。关系操作符都是二元操作符,左右操作数都是表达式。关系表达式成立,则值为true,否则值为false。关系运算符与关系表达式的详细说明如表所示。
| 运 算 符 | 说 明 | 操 作 数 | 表 达 式 | 值 |
| == | 相等运算符 | 二元 | 3==4 | false |
| != | 不等运算符 | 二元 | 3!=4 | true |
| < | 小于运算符 | 二元 | 3<4 | true |
| > | 大于运算符 | 二元 | 9>3 | true |
| <= | 小于等于运算符 | 二元 | 9<=2 | false |
| >= | 大于等于运算符 | 二元 | 9>=9 | true |
3、赋值运算符与赋值表达式
赋值操作符用于为变量、属性、事件或索引器元素赋新值。C#中的赋值操作符包括“=”、“+=”、“-=”、“*=”、“/=”、“^=”、“%=”、“<<=”和“>>=”。右操作数的值存储在左操作数表示的存储位置、属性或索引器中,并将值作为结果返回。操作数的类型必须相同(或右边的操作数必须可以隐式转换为左边操作数的类型)。赋值运算符及赋值表达式的详细说明如表所示。
| 运 算 符 | 说明 | 操作数 | 表达式 | 意义 | 操作数类型 | 值类型 |
| = | 赋值 | 二元 | c=a+b | 将右边的值给左边 | 任意类型 | 任意类型 |
| += | 加赋值 | 二元 | 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 | 整型 | 整型 |
| &= | 位与赋值 | 二元 | 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 |
4、逻辑运算符与逻辑表达式
逻辑运算符包括“&”、“^”、“!”和“|”,用逻辑运算符把运算对象连接起来,符合C#语法的式子称为逻辑表达式。这4个操作符用于表达式,产生一个true或false逻辑值。逻辑运算符与逻辑表达式的详细说明如表所示。
| 运 算 符 | 说 明 | 操 作 数 | 表 达 式 | 操作数类型 | 值 类 型 | ||||
| & | 与操作符 | 二元 | a&b | 布尔型 | 布尔型 | ||||
| ^ | 异或操作符 | 二元 | a^b | 布尔型 | 布尔型 | ||||
| ! | 非操作符 | 一元 | !a | 布尔型 | 布尔型 | ||||
| | | 或操作符 | 二元 | a|b | 布尔型 | 布尔型 | ||||
| a | b | a&b | a|b | !a | a^b | ||||
| false | false | false | false | true | false | ||||
| false | true | false | true | true | true | ||||
| true | false | false | true | false | true | ||||
| true | true | true | true | false | false | ||||
5、位运算符
位运算符将它的操作数看作是一个二进制位的集合,每个二进制位可以取值0和1。位操作符允许开发人员测试或设置单个二进制或一组二进制位。C#语言中的位操作符及其功能如表所示。
| 运 算 符 | 说 明 | 操 作 数 | 表 达 式 | 操作数类型 | 值 类 型 |
| << | 左移运算符 | 二元 | a<<b | 整型 | 整型 |
| >> | 右移运算符 | 二元 | a>>b | 整型 | 整型 |
| & | 位与运算符 | 二元 | a&b | 整型 | 整型 |
| ^ | 位异或运算符 | 二元 | a^b | 整型 | 整型 |
| | | 位或运算符 | 一元 | a|b | 整型 | 整型 |
6、其他运算符
递增、递减运算符(++、--)
条件运算符(?:)
new运算符(ClassTest test=newClassTest();)
as运算符(string s=someObject as string;)
7、运算符的优先级
| 类别 | 运算符 | 优先级 | 结合性 |
| 基本 | x.y、f(x)、a[x]、x++、x--、new、typeof、checked、unchecked | 1 | 自右向左 |
| 单目 | +、-、!、~、++、--、(T)x、~ | 2 | 自左向右 |
| 乘除 | *、/、% | 3 | 自左向右 |
| 加减 | +,- | 4 | 自左向右 |
| 移位 | <<, >> | 5 | 自左向右 |
| 比较 | <, >, <=, >=, is, as | 6 | 自左向右 |
| 相等 | ==, != | 7 | 自左向右 |
| 位与 | & | 8 | 自左向右 |
| 位异或 | ^ | 9 | 自左向右 |
| 位或 | | | 10 | 自左向右 |
| 逻辑与 | && | 11 | 自左向右 |
| 逻辑或 | || | 12 | 自左向右 |
| 条件 | ?: | 13 | 自右向左 |
| 赋值 | =、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>= | 14 | 自右向左 |
五、字符串处理的方法。
1、比较字符串
String类提供了一系列的方法用于字符串的比较,如CompareTo方法、Equals方法等。
CompareTo方法用于比较两个字符串是否相等,格式如下:
String.CompareTo(String);
Equals方法是确定两个String对象是否具有相同的值,格式如下:
String.Equals(String);
2、定位字符及子串
定位字符串中某个字符或子串第一次出现的位置使用IndexOf方法,格式如下:
String.IndexOf(String);
其中,参数为要定位的字符或子串。如果找到该字符,则为参数值的索引位置,从0开始;如果未找到该字符,则为-1;如果参数为Empty,则返回值为0。例如:
string str1="abcd";
int m1=str1. IndexOf ("b");
int m2=str1. IndexOf ("cd");
int m3=str1. IndexOf ("");
int m4=str1.IndexOf("w");
3、格式化字符串
.NET Framework提供了一种一致、灵活而且全面的方式,能够将任何数值、枚举、日期和时间等基本数据类型表示为字符串。格式化由格式说明符的字符串控制,该字符串指示如何表示基类型值。例如,格式说明符指示是否应该用科学记数法来表示格式化的数字,或者格式化的日期在表示月份时应该用数字还是用名称,格式如下:
String Format(String,Object);
将指定的String中的格式项替换为指定的Object实例。例如:
//格式化为Currency类型
string str1 = String.Format("(C) Currency:{0:C}\n", -123.45678f);
//格式化为ShortDate类型
string str2 = String.Format("(d) Short date: {0:d}\n",DateTime.Now);
4、截取字符串
Substring方法可以从指定字符串中截取子串,格式如下:
String.Substring(Int32,Int32);
子字符串从指定的字符位置开始且具有指定的长度。第1个参数表示子串的起始位置,第2个参数表示子字符串的长度。例如:
string str="Hello World!";
string str1=str.Substring (0,5);
5、分裂字符串
Split方法可以把一个字符串按照某个分隔符分裂成一系列小的字符串,格式如下:
String[] Split(Char[]);
其中,参数为分隔字符串的分隔符数组。例如:
string str = "Hello.World!";
string[] split = str.Split(new Char[] { '.', '!'});
foreach (string s in split)
{
if (s.Trim() != "")
Console.WriteLine(s);
}
6、插入和填充字符串
1.插入字符串
Insert()方法用于在一个字符串的指定位置插入另一个字符串,从而构造一个新的串,格式如下:
String Insert(Int,String);
2.填充字符串
字符串通过使用PadLeft/PadRight方法添加指定数量的空格实现右对齐或左对齐。新字符串既可以用空格(也称为空白)进行填充,也可以用自定义字符进行填充。格式如下:
String PadLeft(Int,Char);
String PadRight(Int,Char);
7、删除和剪切字符串
1.删除字符串
Remove()方法用于在一个字符串的指定位置删除指定的字符,格式如下:
String Remove (Int,Int);
2.剪切字符串
若想把一个字符串首尾处的一些特殊字符剪切掉,可以使用Trim、TrimStart、TrimEnd方法,格式如下:
String Trim(Char[]); //从字符串的开头和结尾处移除空白
String TrimStart (Char[]);//从字符串的开始处移除在字符数组中指定的字符
String TrimEnd (Char[]); //从字符串的结尾处移除在字符数组中指定的字符
8、复制字符串
Copy方法可以把一个字符串方法复制到另一个字符串中,格式如下:
String Copy(String);
其中,参数为需要复制的源字符串,方法返回目标字符串。例如:
string str="Hello World!";//源字符串
string newstr=String.Copy(str);//目标字符串
9、替换字符串
Replace方法可以替换掉一个字符串中的某些特定字符或者子串,格式如下:
String Replace(String String);
其中,第1个参数为待替换的子串;第2个参数为替换后的新子串。例如:
string str="It is a dog.";
str=str.Replace("dog","pig");
六、流程控制。
1、分支语句
1.if…else语句
if…else语句是控制在某个条件下才执行某个功能,否则执行另一个功能。if…else语句的语法格式如下:
if(布尔表达式)
{
//代码段1
}
else
{
//代码段2
}
2.switch语句
switch语句是一个控制语句,它通过将控制传递给其体内的一个case语句来处理多个选择和枚举。switch语句的语法格式如下:
switch(条件)
{
case 条件1:
//代码段1
break;
…
case 条件n:
//代码段n
break;
default : 语句n+1;
break;
}
2、循环语句
1.for语句
for语句循环重复执行一个语句或语句块,直到指定的表达式计算为false 值。for语句的语法格式如下:
for(初始值;布尔表达式;表达式)
{
//代码段
}
2.while语句
while语句用来在指定条件内重复执行一个语句或语句块。while语句的语法格式如下:
while(布尔表达式)
{
//代码段
}
3.do…while语句
do…while语句实现的循环是直到型循环,该类循环先执行循环体再测试循环条件。do…while语句的一般语法格式如下:
do
{
//代码段
}while(布尔表达式);
4.foreach语句
foreach语句提供一种简单、明了的方法来循环访问数组的元素。foreach语句的一般语法格式如下:
foreach(数据类型 变量名 in 数组或集合)
{
//代码段
}
3、异常处理语句
(1)try-catch语句
try-catch语句由一个try块后跟一个或多个catch子句构成,这些子句指定不同的异常处理程序。
try块包含可能导致异常的保护代码。该块一直执行到引发异常或成功完成为止。
catch子句使用时可以不带任何参数,这种情况下它捕获任何类型的异常,并被称为一般catch子句。它还可以接受从System.Exception派生的对象参数,这种情况下它处理特定的异常。
(2)try-finally语句
(3)try-catch-finally语句
(4)throw语句
七、数组的定义与使用方法。
1、数组的声明
数组可以具有多个维度。一维数组即数组的维数为1。一维数组声明的语法为:
type[] arrayName;
二维数组即数组的维数为2,它相当于一个表格。二维数组声明的语法为:
type[,] arrayName;
其中,type为数组存储数据的数据类型;arrayName为数组名称。
2、初始化数组
数组的初始化有很多形式,可以通过new运算符创建数组并将数组元素初始化为它们的默认值。例如:
int[] arr =new int[5];//arr数组中的每个元素都初始化为0
int[,] array = new int[4, 2];
可以在声明数组时将其初始化,并且初始化的值为用户自定义的值。例如:
int[] arr1=new int[5]{1,2,3,4,5};//一维数组
int[,] arr2=new int[3,2]{{1,2},{3,4},{5,6}};//二维数组
可以声明一个数组变量时不对其初始化,但在对数组初始化时必须使用 new 运算符。例如:
//一维数组
string[] arrStr;
arrStr=new string[7]{"Sun", "Mon", "Tue","Wed", "Thu", "Fri", "Sat"};
//二维数组
int[,] array;
array = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
实际上,初始化数组时可以省略new运算符和数组的长度。编译器将根据初始值的数量来计算数组长度并创建数组。例如:
string[] arrStr={"Sun", "Mon", "Tue","Wed", "Thu", "Fri", "Sat"};//一维数组
int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };//二维数组
3、数组的遍历
C#还提供foreach语句,该语句提供一种简单、明了的方法来循环访问数组的元素。例如,定义一个整型数组array,并用foreach语句循环访问该数组。
int[] arrays = { 7, 76, 33, 51, 2, 4, -6, 1, 0 };
foreach (int i in arrays)
{
System.Console.Write("{0}、",i);
}
[指导与训练方案]
1、课堂练习:(培养学生知识的实际运用技能)
(1)题目:
操作一:定义常量、定义变量
操作二:类型转换的方法。
操作三:运算符及表达式。
操作四:字符串处理的方法。
操作五:流程控制。
操作六:数组的定义与使用方法。
(2)教师活动:巡视指导
2、点评:(反馈教学效果)
3、小结:这节课我们学习了ASP.NET相关语法(C#),在日常生活中我们见过很多和网页关联的问题,我们要学会用自己的知识去解释生活中的现象,可以把生活中的细节用我们所学的知识进行展现。
4、作业:(引导学生自学,激发学生探索学习现代科学知识的主动性)
回忆C语言的语法,尝试写C#语句。

