《DotNet程序设计》备课笔记.docx
- 文档编号:10890595
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:47
- 大小:60.19KB
《DotNet程序设计》备课笔记.docx
《《DotNet程序设计》备课笔记.docx》由会员分享,可在线阅读,更多相关《《DotNet程序设计》备课笔记.docx(47页珍藏版)》请在冰豆网上搜索。
《DotNet程序设计》备课笔记
-第一章.NET概述
1.1.NET战略的产生背景和组成结构
1、计算机应用平台的两次变革
70年代至今,计算机应用平台发生了两次影响深远的变革,即“DOSWindowsInternet”。
两次变革的影响体现在:
(1)DOSWindows的平台迁移简化了计算机应用的复杂型,提供友好的操作方式,促进了计算机的应用普及。
(2)WindowsInternet的变化,使各类信息服务突破本地计算机的资源限制,应用程序在Internet范围内进行通信和协作,整合最广泛的信息资源和计算资源,产生更准确、有效的服务结果。
2、.NET战略的产生
.NET战略是MS公司面向Internet时代的应用特点和开发需求而推行的商业解决方案,它封装了相关产品、技术规范和应用开发框架。
3、.NET战略的组成结构
(1)Orchestration负责整合网络中各种应用和组件,完成流程调度、消息传递、数据交换等各种处理机制。
(2).NETFramework提供一个用于开发和运行符合.NET技术规范应用程序的基础框架。
(3).NETEnterpriseServers是微软在.NET战略中所推行的一系列企业级服务器软件产品,如HostIntegrationServer;ApplicationCenterServer;BiztalkServer等等。
(4)BuildingBlockService,由微软和第三方网络服务供应商在整个Internet上提供的公共基础服务单元(系统);如电子户政、个人事务管理、信息安全等等。
1.2.NETFramework
.NETFramework是为开发和运行适应互联网时代特点的应用程序和网络服务单元所提供的基础框架。
——既为开发.NET程序提供基础支持,也封装了.NET程序运行的基本环境。
1、.NETFramework的体系结构
.NETFramework的体系结构如图所示
C#
VB.NET
VC++.NET
J#
……
CLS(CommonLanguageSpecification,公共语言规约)
WebForm
WindowsForm
WebService
DATA&XML
BaseClassLibrary
CLR(CommonLanguageRuntime,公共语言运行时环境)
(1)语言层:
由各种支持.NETFramework框架的程序设计语言构成。
(2)MSIL层:
该层次封装了公共语言规约CLS,这是为不同程序设计语言编译器所制定的一致技术规范,确保编译器能够产生符合CLS的中间代码(MSIL);从而使得不同编程语言所编写的程序能够集成应用和相互协作。
(3)应用模板层:
该层次为开发不同类型的应用程序(Web应用、Windows应用和WebService应用)提供开发模板和组件化支持。
(4)数据管理层:
为数据集存取访问和应用基于XML的数据提供支持。
(5)基础类库层:
该层次封装了与CLR集成的各种可重用类型集合,类库通过“命名空间”进行逻辑分组管理,类似于VC++的MFC,DELPHI的VCL和JAVA的基础类库包。
(6)公共语言运行时环境是MSIL的执行环境,提供内存管理、线程管理和远程处理等核心服务。
CLR的作用类似JAVA中JVM,它将MSIL编译成与运行平台相关的机器指令,从而确保.NET程序的平台无关性。
2、托管代码和非托管代码
CLR是进行中间代码管理和运行的基本代理,凡符合CLS的程序(中间代码)都可以运行在CLR中。
通常将依赖于CLR运行的代码成为托管代码,将不依赖CLR运行的程序代码成为非托管代码。
托管代码只能运行在安装有.NETFrameworkSDK的计算机中。
1.3VisualStudio.NET
VisualStudio.NET是微软面向.NET程序开发人员提供的集成开发环境。
迄今为止主要有两个主要版本,即
(1)VisualStudio.NET2003——封装了.NETFramework1.1
(2)VisualStudio.NET2005——封装了.NETFramework2.0
VS.NET2005根据IDE中配置的开发工具和组件的不同,又分为4种发布版本,即TeamSystem,Professinal,Standard,Express。
所提供的开发配置和工程管理能力由强至若。
本课程要求的实践环境为VS.NET2005Standard版以上。
第二章、C#语言基础
2.1C#语言特点
C#是微软基于.NETFramework所推行的一种高级程序设计语言,它保留了C和C++语言的基础语法,综合了JAVA语言在易用性方面的优点,提供了开发Windows程序、Internet程序及服务组件的RAD(快速应用开发)能力。
C#语言的特点主要包括:
1.支持CLS和交叉语言处理。
2.简洁易用。
语法类似C++和JAVA,摈弃了C++中复杂的技术手段和语法现象,如指针、多重继承、伪编译指令等。
3.全面支持OO方法。
以类和对象为基本单元组织程序结构,不存在全局变量和全局函数,程序结构更健壮合理。
4.安全可靠。
提供有效的运行时错误捕获和处理机制,基于CLR的内存管理、线程管理核心服务确保了程序运行更加安全可靠。
5.与WEB的紧密结合。
可以灵活应用基于.NETFramework的开发支持,简化了WEB应用开发的复杂度。
6.有效的版本管理机制。
C#内置了版本控制功能,提供了对函数重载、接口特性支持等机制,便于程序的升级维护。
2.2C#程序结构
以控制台程序为例(类似教材P2的例子)。
usingSystem;//导入命名空间
classWelcome//声明一个类,名字为Welcome
{
publicstaticvoidMain(string[]args)//入口方法
{
Console.Write(“请输入姓名:
”);//控制台输出
stringn=Console.ReadLine();//读取控制台输入后换行
Console.WriteLine(“你好,{0}!
”,n);//控制台输出后换行
Console.ReadLine();//等待输入,防止程序一闪而过
}
}
程序说明
1.导入命名空间——using命名空间
命名空间是对.NETFramework基础类库的逻辑组织形式,基础类库提供了1000多个可重用类型(如类、接口、结构体等),这些类型要在程序中使用,必须指明其存在的位置,如以“命名空间.子命名空间.…….类型名”,为简化代码,可通过using语句导入名字空间,则位置前缀可省略。
2.声明一个类——class类名{成员声明及实现}
类是C#中组织程序和数据的基本单位,所有函数和数据必须通过类进行封装,作为类的成员。
3.入口方法——publicstaticvoidMain(string[]args)
(1)入口方法是应用程序的执行开始点。
(2)C#程序中必须有且仅有一个类包含入口方法,称为主动类。
(3)入口方法的声明前缀必须是:
publicstatic
(4)入口方法返回值只能是void或int
(5)入口方法可以没有参数或带有字符串类型参数。
4.控制台类Console
在基础类库中提供,被定义在System命名空间下,其静态(static)方法Read,ReadLine,Write,WriteLine可以进行控制台窗口中的输入、输出操作。
5.C#语言大小写敏感——与JAVA,C++一样。
6.C#程序的注释
C#注释分三种,分别是
(1)//单行注释,由//开始注释到行尾,
(2)/*多行注释*/;由/*开始,注释到与之配对的*/
(3)///XML注释;通常用于对用户自定义类型进行结构化注释,在某个自定义类型声明前一行连续输入三个///,系统会自动生成XML格式的注释,注释内容会与被注释类型自动匹配。
下面是对成员函数ADD的自动XML注释。
///
///
///
///
///
///
PublicintAdd(inti,intj)
{
returni+j;
}
2.3C#数据类型
1、值类型和引用类型
C#数据类型可分为两类,分别是值类型和引用类型。
简单类型
结构类型值类型
枚举类型
类
接口引用类型
数组
委托
(1)值类型变量的值保存在“栈”中,赋值语句传递的是变量的值;
inti=10;
intj=i;
(2)引用类型的实例保存在“堆”中,“栈”中存储的引用类型变量代表的是对“堆”内存区的引用(指针),引用类型变量的直接赋值并没有在堆中重新创建一个新的引用实例,而是使两个引用变量指向了同一个“堆”内存区。
引用类型变量必须通过new语句在堆中建立其引用的实例数据。
int[]arr1=newint[4]{10,9,8,7};
int[]arr2=arr1;
值类型和引用类型的区别可总结为下表
类型
比较项
值类型
引用类型
变量内容
变量中存储的值
引用实例的地址(指针)
内存分配位置
栈
堆
内存分配要求
长度固定
长度不固定
访问效率
稍快
稍慢
生命期管理
由作用域决定
内存管理器根据引用次数决定是否回收
2、值类型
C#的值类型又可分为简单类型,结构类型和枚举类型。
(1)简单类型
简单类型又分为:
整数类型,浮点类型,布尔类型,字符类型,字符串类型。
各种简单类型的特性总结如下表。
类别
关键字
类型说明
类型符
整数型
sbyte
1字节,有符号整数
byte
1字节,无符号整数
U
short
2字节,有符号整数
ushort
2字节,无符号整数
U
int
4字节,有符号整数
uint
4字节,无符号整数
U
long
8字节,有符号整数
L
ulong
8字节,无符号整数
UL
浮点型
float
4字节,精度7位
F
double
8字节,精度15-16位
D
decimal
16字节,精度28-29位
M
布尔型
bool
仅限true和false
字符型
char
2字节,存储Unicade字符
字符串型
string
存储多个Unicade字符序列
关于使用简单类型的几点注意:
1)类型符用于对常量值的类型说明,如i=2.7F;j=5.241M;
2)整数类型的值可以用十进制和十六进制表示,十六进制整数常量书写时应加前缀“0x”,如inti=0x1A2B;
3)字符型(char)占2字节,常量值使用’’,如chari=’Z’;也可以使用十六进制(\x)或Unicode前缀(\u)表示字符型常量。
如:
charc1=’\x0041’;
charc2=’\u0041’;
4)字符类型能隐式转换成整数类型,但整数类型不能隐式转换为字符类型。
inti=’A’;//正确,i值为65。
charb=65//错误。
5)字符串型常量使用“”,如stringi=“abcd”;
6)布尔类型仅有两个可能取值,且不能与整数类型隐式转换。
(2)枚举类型
枚举类型是一组命名常量的集合,其作用主要是以含义的名字代表一组整数,从而提高代码可读性和可维护性。
1)声明枚举类型的语法
[附加修饰][可见性]enum类型名[:
数据类型]{枚举列表}
例如:
publicenumWeekDays:
byte{sun,mon,tue,wed,thu,fri,sat};
说明:
(a)数据类型默认为int,其他有符号整数亦可。
(b)枚举列表中第一个元素默认值为0,每个元素都可直接指定其值,后续元素的值默认为其前驱元素的值加1。
2)应用枚举类型举例
enumEType{e1=2,e2=1,e3};
staticvoidEnumTest()
{
Console.Write("e1={0},e2={1},e3={2}",(int)EType.e1,(int)EType.e2,(int)EType.e3);
ETypee=(EType)2;
Console.Write("e={0}",e);
e=EType.e2;
Console.Write("e={0}",e);
}
输出:
e1=2,e2=1,e3=2,e=e1,e=e2
(3)结构类型
1)结构类型——C++中的结构体,是复合数据类型。
2)声明结构类型的语法
[附加修饰][可见性]struct结构体名:
[实现的接口]
{
//结构体成员定义
/*可以包含构造函数,常数、字段、方法、属性、索引、操作符和嵌套类型*/
}
举例
publicstructPoint
{
publicintx,y;//定义了x和y两个整型字段
publicstringdesc;//定义了字符串型字段desc
}
3)结构类型应用实例
staticvoidstructTest()
{
Pointp1,p2,p3;//注意,未经初始化的结构体变量不能直接使用
p1.x=2;
p1.y=2;
p1.desc="起点";
p2=p1;//值类型的变量间赋值,
p2.x+=2;
p2.desc="终点";
p3=newPoint();//调用默认构造函数,初始化变量P3的内部成员
Console.WriteLine();
Console.Write("p1:
{0},x={1},y={2}",p1.desc,p1.x,p1.y);
Console.Write("p2:
{0},x={1},y={2}",p2.desc,p2.x,p2.y);
Console.Write("p3:
{0},x={1},y={2}",p3.desc,p3.x,p3.y);
}
(4)值类型的初值和默认构造函数
值类型的变量都可以通过new语句调用其默认构造函数,其作用是对变量或变量成员赋初值,其中数值类型的初值为0;字符变量的初值为“\u0000”,字符串为“”,布尔类型为false。
3、引用类型
C#的引用类型又可分为类类型,接口类型和委托类型和数组类型。
(1)数组类型
1)C#中可以使用的数组类型包括一维、多维和交错数组
2)数组的声明和实例化
//一维数组的声明与实例化
int[]arr1;//声明语法:
类型[]数组名
arr1=newint[20];//实例化:
数组名=new类型[数组长度]
int[]arr11=newint[10];//声明与实例化同时完成
//多维数组的声明与实例化,以二维数组为例
int[,]arr2;//声明语法:
类型[,……,]数组名
arr2=newint[2,3];//实例化:
数组名=new类型[1维长度,…,n维长度]
int[,]arr21=newint[2,3];//声明与实例化同时完成
//交错数组的声明与实例化,以二维交错数组为例
int[][]arr34=newint[3][];//声明并实例化行数组
arr34[0]=newint[2]{10,11};//实例化0行列数组,并赋初值
arr34[1]=newint[3]{20,21,22};//实例化1行列数组,并赋初值
arr34[2]=newint[4]{30,31,32,33};//实例化2行列数组,并赋初值
上述代码执行后的二维交错数组arr34可如图所示
10
11
……arr34[0]
20
21
22
……arr34[1]
30
31
32
33
……arr34[2]
3)数组的使用
a)通过“数组名字[维下标]”访问数组单元,维下标以0为开始索引。
b)一维数组可以使用Length属性获得数组长度;多维数组可以使用GetLength方法获得某一维长度。
c)可以利用数组类Array的Sort,Reverse方法对数组进行排序。
举例
int[]arr1=newint[5]{6,7,2,4,3};
intL=arr1.Length;//L=5;
int[,]arr23=newint[2,3]{{4,5,6},{3,2,1}};
intL1=arr23.GetLength(0);//L1=2
intL2=arr23.GetLength
(1);//L2=3
Array.Sort(arr1);//arr1={2,3,4,6,7}
Array.Reverse(arr1);//arr1={7,6,4,3,2}
4、类型转换
(1)隐式转换与显示转换
隐式转换指不需要额外声明就可以进行的类型转换;显示转换也叫强制转换,必须明确指出转换的目标类型。
通常由“低精度、小范围”类型向“高精度、大范围”类型的类型转换是安全的,可以隐式进行,而反向则不安全,必须显式进行。
举例
inti=20;
floatj=i;//隐式转换
i=(int)j;//显式转换
可以利用checked()函数检测强制转换是否发生溢出错误,当转换溢出时checked()函数将抛出OverflowException异常。
(2)装箱(boxing)与拆箱(unboxing)
Object类型是C#中所有数据类型的基类,因而根据里氏替换原则,Object类型可以引用绑定一切其他类型,具体数据类型向Object类型的泛化将减弱某一操作对特定数据类型的限制,实现对任意数据类型的多态支持。
装箱操作是通过值类型数据生成Object类型对象的泛化过程;拆箱操作是装箱操作的逆过程,即通过Object类型对象具体化为某种值类型数据。
举例:
inti=123;
Objectbox=i;//装箱操作,根据值类型变量i生成对象类型变量box
intj=(int)box;//拆箱操作,由对象类型变量box生成值类型变量j
2.4C#运算符与优先级
C#运算符与优先级可通过下表总结(优先级由上至下)
括号运算
()
一元运算
+(取正),-(取负),!
(非)
算术运算
*,/,%(取余)
+,-
移位运算
<<,>>
关系运算
<,>,<=,>=,is
==,!
=
二进制运算
&(与)
^(异或)
|(或)
布尔运算
&&(与)
||(或)
条件选择运算
?
:
赋值运算
=,+=,-=,*=,/=,%=
2.5C#流程控制语句
除顺序执行外,可以利用C#的流程控制语句实现分支结构、循环结构、异常处理和控制流的强制跳转。
1、分支结构
(1)if语句
基本形式
if(布尔式1)
{
布尔式1为true时执行的语句序列
}
[[elseif(布尔式2)
{
布尔式2为true时执行的语句序列
}
……
elseif(布尔式n)
{
布尔式n为true时执行的语句序列
}]
else
{
所有布尔式为false时执行的语句序列
}]
(2)switch语句
基本形式
switch(条件表达式)
{
case常量表达式1
{
语句序列1;
break;
}
case常量表达式2
{
语句序列2;
break;
}
……
[default:
{语句序列}]
}
switch分支结构说明
1)条件表达式和case的常量表达式可以是string、int、char、enum或其他值类型。
2)各个case分支(包括default分支)顺序无关,但每个case分支的处理语句最后都应以break指令结束。
2、循环结构
C#的循环控制结构可以通过for语句,foreach语句,while语句或do……while语句实现;其中前两种语句通常称为计数循环结构;后两种成为条件循环结构。
(1)for语句
基本形式
for(循环变量初值;循环控制条件;循环变量增量)
{
循环语句体
}
(2)foreach语句
foreach语句通常用于对集合对象执行“遍历”操作,即通过循环对集合中的每个成员操作一次。
基本形式
foreach(集合成员类型控制变量in集合变量)
{
循环语句体
}
举例
int[]arr={1,2,3};
foreach(intiinarr)
{
i++;
}
(3)while语句
基本形式
while(布尔表达式)
{
循环语句体
}
(4)do……while
do……while循环后置循环控制条件,与while循环的区别在于循环语句体至少执行一次。
基本形式
do
{
循环语句体
}while(布尔表达式)
3、强制跳转指令
涉及流程控制的强制跳转指令包括:
break;continue;goto;return;
(1)break
功能:
退出最近封闭的switch;while;do……while;for或foreach结构。
(2)continue
功能:
终止while;do……while;for或foreach的当前循环,继续对下一次循环的执行条件进行判定。
(3)goto
用法:
goto标签;
功能:
将控制流跳转到由标签指示的代码行继续执行。
(4)return;
用法:
return[返回值];
功能:
结束当前函数的执行,将返回值和控制权交回函数调用方。
4、异常捕获与处理
异常是程序运行时的产生的错误或以外行为,对异常的捕获和处理可以提高程序健壮性。
(1)异常捕获和处理的语句形式
try
{
可能产生异常的语句
}
catch(异常类型1变量)
{
对异常类型1的处理
}
……
catch(异常类型n变量)
{
对异常类型n的处理
}
finally
{
程序结束前必须执行的处理语句
}
(2)throw语句
用法:
throw[异常类型变量];
作用:
在异常处理语句块中重新抛出异常,以通知调用程序对该异常进行处理。
注意:
只有在catch处理语句中throw后面的异常类型变量可以省略,此时返回给调用方的是当前catch语句正在处理的异常类型。
(3)异常捕获与举例的完整举例
classProgram
{
staticvoidMain(string[]args){
try{
ExcCatch();
}
catch(Exce
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DotNet程序设计 DotNet 程序设计 备课 笔记