版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、12本课程的前序课程:本课程的前序课程:1.1.大学本专科计算机导论大学本专科计算机导论 2. C2. C语言程序设计语言程序设计 本课程主要讲述内容:本课程主要讲述内容:1. Windows1. Windows应用程序应用程序 2. Web2. Web应用程序应用程序(ASP.Net) (ASP.Net) 3. Web3. Web服务服务 3本书详细内容本书详细内容第第1章章 C#语言基础语言基础 第第2章章 Windows编程的基础知编程的基础知 识识 第第3章章 常用控件和类的使用常用控件和类的使用 第第4章章 文本编辑器的实现文本编辑器的实现 第第5章章 图形图像编程图形图像编程 第第
2、6章章 文件和流文件和流 第第7章章 多线程程序设计多线程程序设计 第第8章章 数据库与数据库与ADO.Net 第第9章章 ASP.Net编程基础知识编程基础知识 第第10章章 Web服务器控件服务器控件 第第11章章 ASP.Net内建对象内建对象 第第12章章 可扩展标记语言可扩展标记语言 第第13章章 Web服务服务 4C#及及Visual Studio开发工具介绍开发工具介绍 C# 2000年年 C#诞生诞生 2001年年 C#被被ECMA(欧洲计算机制造者协会欧洲计算机制造者协会)规定为高级规定为高级 语言开发标准(语言开发标准(ECMA-334 ) 2003年年 C#被被ISO(国
3、际标准化组织国际标准化组织)规定为高级语言开发规定为高级语言开发 标准(标准(ISO/IEC 23270 ) VS开发工具开发工具 2003年年 发布发布Visual Studio.NET 2003(VS.NET2003) 2005年年11月月 发布发布Visual Studio 2005(VS2005)英文版)英文版 2006年年1月月 发布发布VS2005 Professional简体中文版简体中文版5 VS2005的各种版本(功能从最强到最弱)的各种版本(功能从最强到最弱) VS2005 Team 版本版本 用于大型团队开发用于大型团队开发 VS2005 Professional版本版本
4、 用于大中型软件公司用于大中型软件公司 VS2005 Standard版本版本 用于小型软件公司用于小型软件公司 VS2005 Express版本版本 用于业余开发者(初学者)用于业余开发者(初学者) 本课的上机实验环境本课的上机实验环境 (1)VS2005 Express版本版本 (2)Direct X SDK 9.0C 个人安装建议个人安装建议 (1)操作系统使用)操作系统使用 WindowsXP SP2 (2)至少)至少256MB内存,最好内存,最好512MB6第第1 1章章 C#语言基础语言基础 1.1 C#1.1 C#语言特点语言特点 v Microsoft.Net FrameWor
5、kMicrosoft.Net FrameWork是微软提出是微软提出的新一代软件开发模型的新一代软件开发模型v C#C#语言是语言是.Net FrameWork.Net FrameWork中新一代的开中新一代的开发工具发工具v C#C#语言编写的源程序语言编写的源程序, ,被被C#C#语言编译器语言编译器编译为中间语言代码编译为中间语言代码(MSIL),(MSIL),由通用语由通用语言运行环境言运行环境(CLR)(CLR)中的既时编译器中的既时编译器(JIT)(JIT)将中间语言代码翻译为将中间语言代码翻译为CPUCPU可执行的机可执行的机器码,由器码,由CPUCPU执行。执行。 7CLRCL
6、R为为C#C#语言中间语言代码运行提供了一种运语言中间语言代码运行提供了一种运行时环境,行时环境,C#C#语言的语言的CLRCLR和和JAVAJAVA语言的虚拟机类似。语言的虚拟机类似。这种执行方法使运行速度变慢,但带来其他一些这种执行方法使运行速度变慢,但带来其他一些好处,主要有:好处,主要有: v通用语言规范通用语言规范 v自动内存管理自动内存管理 v交叉语言处理交叉语言处理 v更加安全更加安全 v版本支持版本支持 v完全面向对象完全面向对象 81.2 1.2 编写控制台应用程序编写控制台应用程序 程序的代码如下:程序的代码如下:/导入命名空间导入命名空间,C#C#语言新增语言新增注释注释
7、方法,方法,注释注释到本行结束到本行结束 using System;using System; class Welcomeclass Welcome /声明了一个类,类的名字叫做声明了一个类,类的名字叫做WelcomeWelcome /主程序,主程序必须在类中定义,必须是静态的主程序,主程序必须在类中定义,必须是静态的 static void Main()static void Main() /显示器输出字符串显示器输出字符串 Console.WriteLine(Console.WriteLine(“请键入你的姓名:请键入你的姓名:”););Console.ReadLine();/Consol
8、e.ReadLine();/从键盘读入数据,回车结束从键盘读入数据,回车结束Console.WriteLine(Console.WriteLine(“欢迎!欢迎!”); ); 9用微软用微软Visual C#2005 Express Edition(Visual C#2005 Express Edition(以后以后简称简称VS2005)VS2005)生成控制台程序,具体步骤如下:生成控制台程序,具体步骤如下:(1 1)运行运行VS2005VS2005程序,单击菜单程序,单击菜单“文件文件( (F F)|)|新建项目新建项目( (P P) )”菜单项,打开菜单项,打开“新建项目新建项目”对话框
9、对话框。10(2) (2) 选择选择 控制台应用程序控制台应用程序 ,名称,名称(N)(N)编辑框中键入编辑框中键入e1_2e1_2,单,单击击 确定确定 按钮,创建项目。出现如图按钮,创建项目。出现如图1.21.2界面界面 11(3)按按CTRL+F5CTRL+F5键,运行程序,键,运行程序,运行结果如图运行结果如图 121.31.3类的基本概念类的基本概念 C#C#语言是一种现代的、面向对象的语言。面语言是一种现代的、面向对象的语言。面向对象程序设计方法提出了一个全新的概念:向对象程序设计方法提出了一个全新的概念:类,它的主要思想是将数据(数据成员)及处类,它的主要思想是将数据(数据成员)
10、及处理这些数据的相应方法(函数成员)封装到类理这些数据的相应方法(函数成员)封装到类中,类的实例则称为对象。这就是我们常说的中,类的实例则称为对象。这就是我们常说的封装性。封装性。 .1类的基本概念类的基本概念 定义一个描述个人情况的类定义一个描述个人情况的类PersonPerson如下:如下: using System;using System;class class Person Person private string name=private string name=“张三张三”; ; private int age=12;private int age=12;p
11、ublic void Display()public void Display() Console.WriteLine(Console.WriteLine(“姓名姓名:0,:0,年龄:年龄:1,name,age);1,name,age); public public void SetName(string PersonName)void SetName(string PersonName) name=PersonName;name=PersonName; public public void SetAge(int PersonAge) void SetAge(int PersonAge) ag
12、e=PersonAge;age=PersonAge; 141.3.2 1.3.2 类成员的存取控制类成员的存取控制 希望类中一些数据不被随意修改,只能希望类中一些数据不被随意修改,只能按指定方法修改,既隐蔽一些数据。同样一按指定方法修改,既隐蔽一些数据。同样一些函数也不希望被其他类的程序调用,只能些函数也不希望被其他类的程序调用,只能在类内部使用。解决这个问题的方法是使用在类内部使用。解决这个问题的方法是使用访问权限控制字,常用访问权限控制字如下:访问权限控制字,常用访问权限控制字如下:v private(private(私有私有) )v public( public(公有公有) ) 封装有两
13、个意义:封装有两个意义:1.1.把数据和处理数据的方法同时定义在类把数据和处理数据的方法同时定义在类2.2.用访问权限控制字使数据隐蔽用访问权限控制字使数据隐蔽 151.3.3 1.3.3 类的对象类的对象 PersonPerson类仅是一个用户新定义的数据类型,由它类仅是一个用户新定义的数据类型,由它可生成可生成PersonPerson类的实例,类的实例,C#C#语言叫对象。语言叫对象。 Person OnePerson=new Person()Person OnePerson=new Person();/ 生成对象生成对象 Person OnePersonPerson OnePerson;
14、/或者先建立变量或者先建立变量 OnePerson=new Person()OnePerson=new Person();/再生成对象再生成对象变量变量OnePersonOnePerson是对是对PersonPerson类对象的引用类对象的引用,不是不是C C中的指针,不能象指针那样进行加减运算,也不能中的指针,不能象指针那样进行加减运算,也不能转换为其他类型地址,它是引用型变量,只能引用转换为其他类型地址,它是引用型变量,只能引用( (代表代表)Person)Person对象对象 .4构造函数、构造函数重载和析构函数构造函数、构造函数重载和析构函数 v构造函数构造函数:
15、: 每当生成类的对象时,自动调用类的构造函每当生成类的对象时,自动调用类的构造函数。因此可把初始化工作放到构造函数中完成。数。因此可把初始化工作放到构造函数中完成。构造函数和类名相同,没有返回值。例如可定义构造函数和类名相同,没有返回值。例如可定义PersonPerson类的构造函数如下:类的构造函数如下: public public PersonPerson(string Name,int Age)(string Name,int Age) name=Name;name=Name;age=Age;age=Age; 当用当用Person OnePerson=new Person(Person
16、OnePerson=new Person(张五张五 ,20)20)语句生成语句生成PersonPerson类对象时,将自动调用以上类对象时,将自动调用以上构造函数。构造函数。 17v构造函数重载构造函数重载 在在C#C#语言中,同一个类中的函数,如果函数名相同,语言中,同一个类中的函数,如果函数名相同,而参数的类型或个数不同,认为是不同的函数,这叫函数而参数的类型或个数不同,认为是不同的函数,这叫函数重载。仅返回值不同,不能看作不同的函数。这样,可以重载。仅返回值不同,不能看作不同的函数。这样,可以在类定义中,定义多个构造函数,名字相同,参数类型或在类定义中,定义多个构造函数,名字相同,参数类
17、型或个数不同。根据生成类的对象方法不同,调用不同的构造个数不同。根据生成类的对象方法不同,调用不同的构造函数。例如可以定义函数。例如可以定义PersonPerson类没有参数的构造函数如下:类没有参数的构造函数如下:public public PersonPerson()() name=name=“张三张三”; ;age=12;age=12; 用语句用语句Person OnePerson=new Person(Person OnePerson=new Person(李四李四,30),30)生生成对象时,将调用有参数的构造函数,而用语句成对象时,将调用有参数的构造函数,而用语句Person Pe
18、rson OnePerson=new Person()OnePerson=new Person()生成对象时,调用无参数的构造生成对象时,调用无参数的构造函数。函数。 18v析构函数析构函数 变量和类的对象都有生命周期,生命周期结变量和类的对象都有生命周期,生命周期结束,这些变量和对象就要被撤销。类的对象被撤束,这些变量和对象就要被撤销。类的对象被撤销时,将自动调用析构函数。一些善后工作可放销时,将自动调用析构函数。一些善后工作可放在析构函数中完成。析构函数的名字为在析构函数中完成。析构函数的名字为 类名,无类名,无返回类型,也无参数。返回类型,也无参数。 PersonPerson类的析构函数
19、为类的析构函数为 Person() Person()。C#C#中类中类的析构函数不能被自己编写的代码调用,当垃圾的析构函数不能被自己编写的代码调用,当垃圾收集器撤销不被使用的对象时,自动调用不被使收集器撤销不被使用的对象时,自动调用不被使用对象的析构函数。由于析构函数无参数,因此,用对象的析构函数。由于析构函数无参数,因此,析构函数不能重载。析构函数不能重载。 191.3.5 1.3.5 使用使用PersonPerson类的完整的例子类的完整的例子 using System;using System;namespace e1_3_5namespace e1_3_5 class Person c
20、lass Person private String name= private String name=张三张三; ; private int age=12; private int age=12; public void Display() public void Display() Console.WriteLine( Console.WriteLine(“姓名姓名:0,:0,年龄:年龄:1,name,age);1,name,age); public void SetName(string PersonName) public void SetName(string PersonName
21、) name=PersonName; name=PersonName; public void SetAge(int PersonAge) public void SetAge(int PersonAge) age=PersonAge; age=PersonAge; 20/两个构造函数两个构造函数public Person(string Name,int Age) public Person(string Name,int Age) name=Name;name=Name;age=Age;age=Age; public public PersonPerson()() name=name=“田七
22、田七”; ;age=12;age=12; 21class Class1class Class1 static void Main(string args)/static void Main(string args)/主函数主函数 Person OnePerson=new Person( Person OnePerson=new Person(李四李四,30);,30); OnePerson.Display(); OnePerson.Display(); OnePerson.SetName( OnePerson.SetName(王五王五);); OnePerson.SetAge(40); One
23、Person.SetAge(40); OnePerson.Display(); OnePerson.Display(); OnePerson=new Person(); OnePerson=new Person(); OnePerson.Display(); OnePerson.Display(); 22显示的效果是:显示的效果是:姓名姓名: : 李四李四, ,年龄:年龄:3030姓名姓名: : 王五王五, ,年龄:年龄:4040姓名姓名: : 田七田七, ,年龄:年龄:1212231.4 C#1.4 C#的数据类型的数据类型 C#C#语言的数据类型可以分为三大类:语言的数据类型可以分为三大类
24、:v值类型值类型v引用类型引用类型v指针类型指针类型 指针类型仅用于非安全代码中指针类型仅用于非安全代码中 241.4.1 Windows1.4.1 Windows应用程序应用程序v值类型和引用类型区别值类型和引用类型区别 :特性特性值类型值类型引用类型引用类型变量中保存的内容变量中保存的内容实际数据实际数据类型实例类型实例( (对象对象) )的引用的引用( (地址地址) )内存空间配置内存空间配置堆栈(堆栈(Stack)实例实例( (对象对象) )在在受管制的堆受管制的堆(Managed Heap)内存需求内存需求较少较少较多较多执行效率执行效率较快较快较慢较慢内存释放时间点内存释放时间点执
25、行超过定义变量的执行超过定义变量的作用域时作用域时由垃圾回收机制负责回收由垃圾回收机制负责回收赋值语句赋值语句传递变量的值传递变量的值 传递对象的地址传递对象的地址 25v 垃圾收集器垃圾收集器 .Net.Net系统系统CLRCLR内建垃圾收集器,当对象的引用变量被撤内建垃圾收集器,当对象的引用变量被撤销,表示对象的生命周期结束,垃圾收集器负责收回不被销,表示对象的生命周期结束,垃圾收集器负责收回不被使用的对象占用的存储空间。使用的对象占用的存储空间。例子如下:例子如下: using System;using System;class MyClass class MyClass public
26、int a=0;public int a=0; 26class Testclass Test static void Main()static void Main() f1();f1(); static public void f1()static public void f1() int v1=1; int v1=1;int v2=v1;int v2=v1;v2=2;v2=2;MyClass r1=new MyClass();MyClass r1=new MyClass();MyClass r2=r1;MyClass r2=r1;r2.a=2;r2.a=2; 271.4.2 1.4.2 值类
27、型变量分类值类型变量分类 v 简单类型简单类型(Simple types)(Simple types) 数值类型数值类型 整数类型整数类型字符类型字符类型(char) (char) 浮点数类型浮点数类型(float(float、DoubleDouble ) )十进制类型十进制类型(decimal)(decimal) 布尔类型布尔类型(bool) (bool) v 结构类型结构类型(Struct types)(Struct types) v 枚举类型枚举类型(Enumeration types)(Enumeration types) C# C#语言值类型变量无论如何定义,总是值类型变语言值类型变
28、量无论如何定义,总是值类型变量,不会变为引用类型变量。量,不会变为引用类型变量。 281.4.3 1.4.3 结构类型结构类型 结构类型和类一样,可以声明构造函数、数据成员、方法、结构类型和类一样,可以声明构造函数、数据成员、方法、属性等。结构和类的最根本的区别是结构是属性等。结构和类的最根本的区别是结构是值类型,类是引用值类型,类是引用类型。和类不同,结构不能从另外一个结构或者类派生,本身类型。和类不同,结构不能从另外一个结构或者类派生,本身也不能被继承也不能被继承 。结构能够继承接口结构能够继承接口 。例子如下:。例子如下:using System;struct pointstruct p
29、oint public int x,y;public int x,y; class Testclass Test static void Main()static void Main() point P1;point P1;P1.x=166;P1.x=166;P1.y=111;P1.y=111;point P2;point P2;P2=P1; P2=P1; P2.x=166,P2.y=111P2.x=166,P2.y=111point P3=new point();point P3=new point(); 291.4.4 简单类型简单类型 简单类型也是结构类型,因此有构造函数、简单类型也是结
30、构类型,因此有构造函数、数据成员、方法、属性等数据成员、方法、属性等 。C#C#简单类型使用方法简单类型使用方法和和C C、C+C+中相应的数据类型基本一致。需要注意中相应的数据类型基本一致。需要注意的是:的是:v C#C#每种数据类型所占字节数是一定的每种数据类型所占字节数是一定的 v一个字符长度为一个字符长度为1616位位 v整数类型不能隐式被转换为字符类型整数类型不能隐式被转换为字符类型(char)(char) v布尔类型有两个值:布尔类型有两个值:false,truefalse,true。不能认为整数。不能认为整数0 0是是falsefalse,其他值是,其他值是truetrue。 v
31、十进制类型十进制类型(decimal)(decimal)也是浮点数类型,只是精度也是浮点数类型,只是精度比较高,一般用于财政金融计算。比较高,一般用于财政金融计算。 所有简单类型见下表:所有简单类型见下表:30保留字保留字 SystemSystem命名空间中的名字命名空间中的名字 字节数字节数 取值范围取值范围SbyteSbyte System.Sbyte1-128127ByteByte System.Byte10255ShortSystem.Int162-3276832767UshortSystem.UInt162065535IntSystem.Int324-2147483648214748
32、3647UintSystem.UInt32404292967295LongSystem.Int648-9223372036854775808到到 223372036854775808UlongSystem.UInt648018446744073709551615CharSystem.Char2065535FloatSystem.Single43.4E-383.4E+38DoubleSystem.Double81.7E-3081.7E+308BoolSystem.Boolean (true,false)DecimalSystem.Decimal16正负正负 1.0.0* *1010-28-28
33、到到7.9* *10102828之间之间311.4.5 枚举类型枚举类型 C# C#枚举类型枚举类型使用方法和使用方法和C C、C+C+中的枚举类中的枚举类型基本一致型基本一致 , C#C#枚举元素类型可以是枚举元素类型可以是bytebyte、sbytesbyte、shortshort、ushortushort、intint、uintuint、longlong和和ulongulong类型,但不能是类型,但不能是charchar类型。类型。见下例:见下例: enum Days:byteSun,Mon,Tue,Wed,Thu,Fri,Sat;enum Days:byteSun,Mon,Tue,We
34、d,Thu,Fri,Sat;/元素为字节类型元素为字节类型 321.4.6 1.4.6 值类型的初值和默认构造函数值类型的初值和默认构造函数 C#C#语言要求所有变量都必须有初值,如没有赋语言要求所有变量都必须有初值,如没有赋值,采用默认值。值,采用默认值。对于简单类型,对于简单类型,sbytesbyte、bytebyte、shortshort、ushortushort、intint、uintuint、longlong和和ulongulong默认值默认值为为0 0,charchar类型默认值是类型默认值是(char)0(char)0,floatfloat为为0.0f0.0f,doubledou
35、ble为为0.0d0.0d,decimaldecimal为为0.0m0.0m,boolbool为为falsefalse,枚举类型为枚举类型为0 0,在结构类型和类中,数据成员的数,在结构类型和类中,数据成员的数值类型变量设置为默认值,引用类型变量设置为值类型变量设置为默认值,引用类型变量设置为nullnull。可以显示的赋值可以显示的赋值, ,也可用构造函数赋值。也可用构造函数赋值。所有的数值类型都有默认所有的数值类型都有默认的无参数的构造函数,的无参数的构造函数,其功能就是为该数值类型赋初值为默认值。对于其功能就是为该数值类型赋初值为默认值。对于自定义结构类型,由于已有自定义结构类型,由于已
36、有默认默认的无参数的构造的无参数的构造函数,不能再定义无参数的构造函数,但可以定函数,不能再定义无参数的构造函数,但可以定义有参数的构造函数。义有参数的构造函数。 331.4.8 1.4.8 引用类型分类引用类型分类 C#C#语言中引用类型语言中引用类型包括:包括:v 类类包括包括.Net FrameWork.Net FrameWork中定义的类,例如:中定义的类,例如:ObjectObject、数组类、字符串类等。数组类、字符串类等。 程序员也可定义自己的类程序员也可定义自己的类。v接口接口v代表代表 ( (也称作委托)也称作委托) C#C#语言引用类型变量无论如何定义,总是语言引用类型变量
37、无论如何定义,总是引用类型变量,不会变为值类型变量。引用类型变量,不会变为值类型变量。C#C#语言语言引用类型对象一般用运算符引用类型对象一般用运算符newnew建立,用引用建立,用引用类型变量引用该对象。类型变量引用该对象。 341.4.9 object类类 C# C#中的所有类型中的所有类型( (包括数值类型包括数值类型) )都直接或间接都直接或间接地以地以objectobject类为基类。对象类类为基类。对象类(object(object类类) )是所有是所有其他类的基类。任何一个类定义,如果不指定基其他类的基类。任何一个类定义,如果不指定基类,默认类,默认objectobject为基类
38、。为基类。 351.4.10 数组类数组类 C# C#语言中数组是类语言中数组是类System.ArraySystem.Array对象对象,数组可以是一维数组可以是一维的也可以是多维的,也支持数组的数组,即数组的元素还的也可以是多维的,也支持数组的数组,即数组的元素还是数组。一维数组最为普遍,用的也最多。一维数组例子:是数组。一维数组最为普遍,用的也最多。一维数组例子:using System;using System;class Testclass Test static void Main() static void Main() int arr=new int3;/int arr=new
39、 int3;/注意声明数组方法注意声明数组方法for(int i=0;iarr.Length;i+)/for(int i=0;iarr.Length;i+)/数组是类数组是类 arri=iarri=i* *i;i; /注意引用数组方法注意引用数组方法for (int i=0;iarr.Length;i+)for (int i=0;iarr.Length;i+)Console.WriteLine(arr0=1,i,arri); Console.WriteLine(arr0=1,i,arri); 361.4.11 1.4.11 字符串类字符串类(string类类) C# C#语言中定义了一个字符串
40、类语言中定义了一个字符串类stringstring,用于,用于对字符串的操作。这个类也是在命名空间对字符串的操作。这个类也是在命名空间SystemSystem中定义的,是类中定义的,是类System.StringSystem.String的别名。字符串应的别名。字符串应用非常广泛,在用非常广泛,在stringstring类中封装了许多方法,请类中封装了许多方法,请仔细察看书中的例子。仔细察看书中的例子。 371.4.12 1.4.12 类型转换类型转换 C#C#语言中类型转换分为语言中类型转换分为 :v 隐式转换隐式转换,例如:例如:int i=10; long l=i;int i=10; l
41、ong l=i; v 显示转换显示转换,例如:例如: long l=5000; int i=(int)l;long l=5000; int i=(int)l;/如果超过如果超过intint取值范围,将产生异常取值范围,将产生异常 v 加框加框(boxing)(boxing)和消框和消框(unboxing),(unboxing),例如:例如:int i=10;int i=10;object obj=i;object obj=i;/加框操作加框操作int j=(int)obj;int j=(int)obj;/消框操作消框操作 38加框和消框的使用,加框和消框的使用,能显示任何类型数据的方法能显示任
42、何类型数据的方法using System;using System;class Testclass Test static void Display(Object o) static void Display(Object o) Console.WriteLine(Console.WriteLine(数据数据=0,o); =0,o); public static void Main() public static void Main() int n=5;int n=5; Display(n);/ Display(n);/虚参被实参替换:虚参被实参替换:Object o=nObject o=n
43、string s= string s=字符串字符串; Display(s); Display(s); 391.4.13 1.4.13 泛型泛型 上节的最后例子是基于上节的最后例子是基于ObjectObject的,方案存在的,方案存在两个问题:第一是性能,参数的传递是通过加框两个问题:第一是性能,参数的传递是通过加框和消框实现的,这将造成重大的性能损失;第二和消框实现的,这将造成重大的性能损失;第二个问题是在某些情况下不能保证类型安全。个问题是在某些情况下不能保证类型安全。C#2.0C#2.0引进泛型可解决相同问题,使用泛型类型可以最引进泛型可解决相同问题,使用泛型类型可以最大限度地重用代码、保
44、证类型安全以及提高性能。大限度地重用代码、保证类型安全以及提高性能。下例的下例的DisplayDisplay方法是用方法是用C#C#泛型实现泛型实现显示任何类型显示任何类型数据的方法,数据的方法,DisplayDisplay函数是一个模板函数,将根函数是一个模板函数,将根据实参转变为相应类型。据实参转变为相应类型。用泛型实现上例的代码用泛型实现上例的代码如下:如下: 40using System;using System;class Program/class Program/下句下句是说明后边的参数是说明后边的参数T T是是泛型类型泛型类型 static void Display(ref T
45、 o) static void Display(ref T o) Console.WriteLine( Console.WriteLine(数据数据=0,o); =0,o); static void Main(string args)static void Main(string args) int n = 5; int n = 5; Display(ref n);/ Display(ref n);/参数变为参数变为intint类型,调用方法类型,调用方法1 1 string s= string s=“字符串字符串”; ; /参数变为字符串类型参数变为字符串类型, ,调用方法调用方法2 2 D
46、isplay(ref s); Display(ref s); 41 .NET Framework 1.x.NET Framework 1.x版类库中包含许多集合类,版类库中包含许多集合类,都使用了加框和消框概念,例如都使用了加框和消框概念,例如ArrayListArrayList类是容量类是容量可以动态增加的数组,其元素可以是任意类型,是可以动态增加的数组,其元素可以是任意类型,是通过加框和消框实现的。通过加框和消框实现的。.NET Framework2.0.NET Framework2.0版类库版类库提供提供System.Collections.GenericSystem.Collectio
47、ns.Generic命名空间,其中命名空间,其中包含几个新的基于泛型的集合类,如包含几个新的基于泛型的集合类,如List(List(代替代替ArrayList)ArrayList)、Dictionary(Dictionary(代替代替HashTable)HashTable)、LinkedList(LinkedList(双向链表双向链表) )、Queue(Queue(先进先出队列先进先出队列) )、Stack(Stack(堆栈堆栈) ),它能提供比非泛型集合类更好的性能,它能提供比非泛型集合类更好的性能,并保证类型安全。建议并保证类型安全。建议C#2.0C#2.0版应用程序都使用新的版应用程序都
48、使用新的泛型集合类,而不要使用旧的非泛型集合类。下边泛型集合类,而不要使用旧的非泛型集合类。下边的语句表示的语句表示ListList类的使用:类的使用:List L=new List();List L=new List();L.Add(aa);L.Add(aa);421.5 1.5 运算符运算符 C# C#语言和语言和C C语言的运算符用法基本一致。以下重语言的运算符用法基本一致。以下重点讲解二者之间不一致部分。点讲解二者之间不一致部分。 1.5.1 1.5.1 运算符分类运算符分类 与与C C语言一样,按照运算符所作用的操作数个数来分,语言一样,按照运算符所作用的操作数个数来分,C#C#语言
49、运算符可以分为以下几类:语言运算符可以分为以下几类: v 一元运算符:一元运算符作用于一个操作数,一元运算符:一元运算符作用于一个操作数, 例如:例如:-X-X、+X+X、X-X-等。等。v 二元运算符:二元运算符对两个操作数进行运算,二元运算符:二元运算符对两个操作数进行运算, 例如:例如:x+yx+y。v三元运算符:三元运算符只有一个:三元运算符:三元运算符只有一个:x? y:zx? y:z。431.5.2 1.5.2 溢出检查操作符溢出检查操作符 在进行整型算术运算在进行整型算术运算( (如如+ +、- -、* *、/ /等等) )或从一或从一种整型显式转换到另一种整型时,有可能出现运种
50、整型显式转换到另一种整型时,有可能出现运算结果超出这个结果所属类型值域的情况,这种算结果超出这个结果所属类型值域的情况,这种情况称之为溢出。整型算术运算表达式可以使用情况称之为溢出。整型算术运算表达式可以使用checkedchecked或或uncheckedunchecked溢出检查操作符,决定在编溢出检查操作符,决定在编译和运行时是否对表达式溢出进行检查。下面的译和运行时是否对表达式溢出进行检查。下面的例子说明了例子说明了checkedchecked和和uncheckedunchecked操作符的用法:操作符的用法: 44using System;using System;class Cla
51、ss1class Class1 static void Main(string args)static void Main(string args) const int x=int.MaxValue;const int x=int.MaxValue;uncheckedunchecked / /不检查溢出不检查溢出 int z=xint z=x* *2;/2;/编译时不产生编译错误,编译时不产生编译错误,z=-2z=-2Console.WriteLine(z=0,z);/Console.WriteLine(z=0,z);/显示显示-2-2 checkedchecked / /检查溢出检查溢出 i
52、nt z1=(xint z1=(x* *2); /2); /编译时会产生编译错误编译时会产生编译错误Console.WriteLine(z=0,z1);Console.WriteLine(z=0,z1); 451.5.3 new运算符运算符 newnew操作符可以创建值类型变量、引用类型对象,同时操作符可以创建值类型变量、引用类型对象,同时自动调用构造函数。例如:自动调用构造函数。例如:/用用newnew创建整型变量创建整型变量x x,调用默认构造函数,调用默认构造函数int x=new int();int x=new int();/用用newnew建立建立PersonPerson类对象。类对
53、象。PersonPerson变量变量C1C1引用这个对象引用这个对象Person C1=new Person ();Person C1=new Person ();/数组也是类,创建数组类对象,数组也是类,创建数组类对象,arrarr是数组对象的引用是数组对象的引用int arr=new int2;int arr=new int2; 需注意的是,需注意的是,int x=new int()int x=new int()语句将自动调用语句将自动调用intint结结构不带参数的构造函数,给构不带参数的构造函数,给x x赋初值赋初值0 0,x x仍是值类型变量,仍是值类型变量,不会变为引用类型变量。这
54、点和不会变为引用类型变量。这点和C+C+不同。不同。 461.6 程序控制语句程序控制语句 C#语言控制语句和语言控制语句和C基本相同,使用方法基本基本相同,使用方法基本一致。一致。C#语言控制语句包括:语言控制语句包括:if语句、语句、swith语句、语句、while语句、语句、dowhile语句、语句、for语句、语句、foreach语语句、句、break语句、语句、continue语句、语句、goto语句、语句、return语句、异常处理语句等,其中语句、异常处理语句等,其中foreach语句和异常语句和异常语句是语句是C#语言新增加控制语句。语言新增加控制语句。 471.6.1 C#和
55、和C语言语句的不同点语言语句的不同点 与与C不同,不同,C#语言语言if语句、语句、while语句、语句、dowhile语句、语句、for语句中的判断语句,语句中的判断语句,一定要用布尔表达一定要用布尔表达式,不能认为式,不能认为0为为false,其他数为,其他数为true。 C#语言语言switch语句不再支持遍历语句不再支持遍历,每个每个case标签项后标签项后使用使用break语句或语句或goto跳转语句跳转语句。switch语句的控制语句的控制类型类型,即其中控制表达式的数据类型可以是即其中控制表达式的数据类型可以是sbyte、byte、short、ushort、uint、long、u
56、long、char、string或枚举类型。每个或枚举类型。每个case标签中的常量表达式标签中的常量表达式必须属于或能隐式转换成控制类型。如果有两个必须属于或能隐式转换成控制类型。如果有两个或两个以上或两个以上case标签中的常量表达式值相同,编译标签中的常量表达式值相同,编译时将会报错。见下例:时将会报错。见下例: 48using System;class class1 static void Main() System.Console.WriteLine(请输入要计算天数的请输入要计算天数的月份月份);string s=System.Console.ReadLine();string s
57、1=;49switch(s) case 1: case 3: case 5: case 7: case 8: case 10: case 12: /共用一条语句共用一条语句 s1=31; break; case 2: s1=28; break; case 4: case 6: case 9: goto case 11; case 11:s1=30;break;default: s1=输入错误输入错误; break; System.Console.WriteLine(s1);501.6.2 foreach语句语句 foreach语句是语句是C#语言新引入的语句,语句的格式语言新引入的语句,语句的
58、格式为:为:foreach(类型类型 变量名变量名 in 表达式表达式) 循环语句循环语句 using System; class Test public static void Main() int l=10,20,30,40;/数组或集合类型数组或集合类型 foreach(int m in l) /m和和l类型必须一致类型必须一致 Console.WriteLine(0,m); 511.6.3 异常语句异常语句 在编写程序时,不仅要关心程序的正常操作,在编写程序时,不仅要关心程序的正常操作,还应该考虑到程序运行时可能发生的各类不可预还应该考虑到程序运行时可能发生的各类不可预期的情况,比如用
59、户输入错误、内存不够、磁盘期的情况,比如用户输入错误、内存不够、磁盘出错、网络资源不可用、数据库无法使用等,所出错、网络资源不可用、数据库无法使用等,所有这些错误被称作异常,不能因为这些异常使程有这些错误被称作异常,不能因为这些异常使程序运行产生问题。序运行产生问题。C#用异常处理语句来解决异常用异常处理语句来解决异常问题。有以下三种可能的形式:问题。有以下三种可能的形式: v try try catchcatch语句,可以有多个语句,可以有多个catchcatch语句语句 ;vtry -finallytry -finally语句语句 ;vtry -catch-finallytry -catc
60、h-finally语句,可以有多个语句,可以有多个catchcatch语句。语句。 52异常语句捕捉和处理异常的机理是:当异常语句捕捉和处理异常的机理是:当trytry子子句中的代码产生异常时,按照句中的代码产生异常时,按照catchcatch子句的顺序查子句的顺序查找异常类型。如果找到,执行该找异常类型。如果找到,执行该catchcatch子句中的异子句中的异常处理语句。如果没有找到,执行通用异常类型常处理语句。如果没有找到,执行通用异常类型的的catchcatch子句中的异常处理语句。子句中的异常处理语句。无论是否产生异无论是否产生异常,一定执行常,一定执行finallyfinally子句
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广西北海市第二中学(北京八中北海分校)临聘教师招聘2人备考题库(精练)附答案详解
- 2026广东汕尾市城区消防救援大队招聘政府专职消防员4人备考题库及完整答案详解(夺冠)
- 2026长鑫存储科技集团股份有限公司招聘16人备考题库含答案详解(新)
- 2026上半年四川成都市大邑县医疗卫生事业单位考核招聘高层次人才23人备考题库含答案详解【轻巧夺冠】
- 初中物理复习第十一章 物态变化课件
- 纳米技术在鼻窦肿瘤治疗中的前景
- 档案管理库房防水防潮安全隐患排查整治方案
- 现场处置方案演练脚本
- (完整版)钻孔机施工安全技术交底
- 企业年度绩效考核实操指南
- 烹饪原料知识PPT完整全套教学课件
- 《小学生C++创意编程》第1单元课件 软件下载安装
- 汽车保险与理赔试卷
- 最科学养羊技术
- 优质课一等奖初中家庭教育《青少年成才优秀家庭教育案例:家庭春雨 润物无声》
- 如何保证伙伴成功举绩
- GB/T 41155-2021烧结金属材料(不包括硬质合金)疲劳试样
- 发展经济学 马工程课件 0.绪论
- GB/T 17989.2-2020控制图第2部分:常规控制图
- GB/T 17492-2019工业用金属丝编织网技术要求和检验
- GB 13614-2012短波无线电收信台(站)及测向台(站)电磁环境要求
评论
0/150
提交评论