




已阅读5页,还剩109页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 经济管理学院经济管理学院 管理科学与工程系管理科学与工程系 张福平张福平 EmailEmail: 办公室:办公室:J6-205J6-205 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第1 1章章 第第 1 1 章章 .NET Framework.NET Framework和和C#C#概述概述 l l 1.11.1 .NET Framework.NET Framework体系结构体系结构 l l 1.2 C#1.2 C#语言概述语言概述 l l 1.3 1.3 创建第一个创建第一个C#C#项目项目 1.11.1 .NET Framework.NET Framework体系结构体系结构 .NET Framework.NET Framework是一个平台,该平台支持多种应用程序是一个平台,该平台支持多种应用程序 开发。开发。 .NET Framework.NET Framework是支持生成和运行下一代应用程序和是支持生成和运行下一代应用程序和 XML Web ServicesXML Web Services的内部的内部WindowsWindows组件。组件。 .NET Framework.NET Framework具有两个主要组件:公共语言运行库和具有两个主要组件:公共语言运行库和 .NET Framework.NET Framework类库。类库。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第1 1章章 1.1.1 .NET Framework环境 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第1 1章章 1.11.1 .NET Framework.NET Framework体系结构体系结构 公共语言运行库(公共语言运行库(Common Language RuntimeCommon Language Runtime,CLRCLR)。)。 CLRCLR是一个运行时环境,它负责是一个运行时环境,它负责.NET.NET库所开发的所有应库所开发的所有应 用程序的执行。用程序的执行。 一个典型的一个典型的.NET.NET程序的运行过程主要包括以下步骤:程序的运行过程主要包括以下步骤: 选择编译器选择编译器将代码编译为将代码编译为MicrosoftMicrosoft中间语言(中间语言( MSILMSIL)将将MSILMSIL编译为本机代码编译为本机代码运行代码。运行代码。 1.1.2 公共语言运行库 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第1 1章章 1.11.1 .NET Framework.NET Framework体系结构体系结构 .NET Framework.NET Framework类库是一个与公共语言运行库紧密集成类库是一个与公共语言运行库紧密集成 的类型集合。的类型集合。 可开发下列类型的应用程序和服务:可开发下列类型的应用程序和服务: 控制台应用程序控制台应用程序 Windows GUI Windows GUI应用程序应用程序 ASP.NET ASP.NET应用程序应用程序 XML Web Services XML Web Services Windows Windows服务服务 1.1.3 .NET Framework类库 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第1 1章章 1.21.2 C#C#语言概述语言概述 C#C#语言的演化。语言的演化。 从从C C和和C+C+演化而来演化而来 C#C#语言的特点:语言的特点: 简单、灵活简单、灵活 功能强大功能强大 表达力丰富表达力丰富 1.2.1 C#简化 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第1 1章章 1.21.2 C#C#语言概述语言概述 C#C#与与VBVB。 C# C#更强大灵活更强大灵活 C#C#与与C+C+ C# C#是从是从C+C+的基础上演化而来的的基础上演化而来的 C#C#与与JavaJava的比较的比较 Java Java对对C#C#影响深刻影响深刻 1.2.2 C#与其他语言比较 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第1 1章章 1.21.2 C#C#语言概述语言概述 C#C#是高效的面向对象语言是高效的面向对象语言 C#C#类机制还有一个特性是其属性的方法类机制还有一个特性是其属性的方法 C#C#类可以使用多个参数化的构造函数类可以使用多个参数化的构造函数 1.2.3 C#的面向对象技术 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第1 1章章 1.31.3 创建第一个创建第一个C#C#项目项目 命名空间实际上是一种组织关系和其他类型的方法。命名空间实际上是一种组织关系和其他类型的方法。 命名空间是逻辑意义上的组合而非物理组合。命名空间是逻辑意义上的组合而非物理组合。 命名空间可以嵌套。命名空间可以嵌套。 不允许在另一个嵌套的命名空间中声明多部分的命名空不允许在另一个嵌套的命名空间中声明多部分的命名空 间。间。 “. .”和和usingusing 1.3.1 Visual Studio 2005的安装 1.3.2 Visual Studio 2005的使用 1.3.3 命名空间 C#C#编程语言基础编程语言基础 第第2 2章章 第第 2 2 章章 C#C#语言基础语言基础 l l 2.12.1 变了和表达式变了和表达式 l l 2.2 2.2 流程控制流程控制 l l 2.3 2.3 复杂的变量类型复杂的变量类型 l l 2.4 2.4 函数函数 C#C#编程语言基础编程语言基础 第第2 2章章 2.12.1 变量和表达式变量和表达式 变量的声明变量的声明 格式:格式: ,; 标识符:字母、标识符:字母、_ _、 开始,后面可以有数字开始,后面可以有数字 变量名和关键字不能重复。变量名和关键字不能重复。 C#C#区分大小写。区分大小写。 变量命名要做到变量命名要做到“见名知意见名知意” 2.1.1 变量(表示内存中的一个存储数据的位置) C#C#编程语言基础编程语言基础 第第2 2章章 2.12.1 变量和表达式变量和表达式 变量的初始化变量的初始化 先声明,再初始化。先声明,再初始化。 声明的同时初始化。声明的同时初始化。 2.1.1 变量(表示内存中的一个存储数据的位置) C#C#编程语言基础编程语言基础 第第2 2章章 2.12.1 变量和表达式变量和表达式 常量:其值在程序的使用过程中不发生变化的变量。在常量:其值在程序的使用过程中不发生变化的变量。在 声明和初始化时,加上关键字声明和初始化时,加上关键字constconst const double pi = 3.14 const double pi = 3.14; 使用常量的好处:使用常量的好处: 含义清楚。含义清楚。 使得程序更易于修改。使得程序更易于修改。 2.1.1 变量(表示内存中的一个存储数据的位置) C#C#编程语言基础编程语言基础 第第2 2章章 2.12.1 变量和表达式变量和表达式 值类型在堆栈中直接存储其值,等价于其他语言的简单值类型在堆栈中直接存储其值,等价于其他语言的简单 类型。类型。 引用类型在堆中存储值的引用,与引用类型在堆中存储值的引用,与C C中指针相似。中指针相似。 2.1.2 数据类型 C#C#编程语言基础编程语言基础 第第2 2章章 2.12.1 变量和表达式变量和表达式 整型整型 2.1.2 数据类型(值类型) 类型说明后缀范围 sbyte8位有符号整数-128127 byte8位无符号整数0255 short16位有符号整数 ushort16位无符号整数 int32位有符号整数 uint32位无符号整数U或u long64位有符号整数L或l ulong64位无符号整数U或u,ul C#C#编程语言基础编程语言基础 第第2 2章章 2.12.1 变量和表达式变量和表达式 浮点型浮点型 2.1.2 数据类型(值类型) 类型说明后缀有效数字 float32位单精度F或f7 double64位双精度D或d1516 decimal128位高精度M或m28 C#C#编程语言基础编程语言基础 第第2 2章章 2.12.1 变量和表达式变量和表达式 字符型字符型 char char用于存储单个字符,用于存储单个字符,1616位表示一个位表示一个UnicodeUnicode字符字符 转义字符用转义字符用“ ” 布尔类型布尔类型 boolbool类型的值为类型的值为truetrue或或falsefalse,不能在整数之间相互转,不能在整数之间相互转 换,换,0 0不表示不表示falsefalse,非,非0 0不表示不表示truetrue。 2.1.2 数据类型(值类型) C#C#编程语言基础编程语言基础 第第2 2章章 2.12.1 变量和表达式变量和表达式 objectobject类型类型 该类型是所有其他类型的父类型。该类型是所有其他类型的父类型。 stringstring类型类型 字符串是字符类型的数组。修改一个字符串,实际上字符串是字符类型的数组。修改一个字符串,实际上 会创建一个全新的会创建一个全新的stringstring对象。对象。 在字符串前加在字符串前加“ ”可以简化转义字符。可以简化转义字符。 2.1.2 数据类型(引用类型) C#C#编程语言基础编程语言基础 第第2 2章章 2.12.1 变量和表达式变量和表达式 数学运算符数学运算符 + +、- -、* *、/ /,% %(可用于浮点类型)、(可用于浮点类型)、+、- - - 赋值运算符赋值运算符 “= =” += +=、-=-=、* *= =、/=/=、%=%=、|=|=、=、 ; checked checked和和uncheckedunchecked用来测试操作是否产生溢出。用来测试操作是否产生溢出。 字符串转换字符串转换 ToStringToString()(),数字转换成字符串。,数字转换成字符串。 Parse() Parse(),字符串转换成数字。,字符串转换成数字。 2.1.4 类型转换 C#C#编程语言基础编程语言基础 第第2 2章章 2.12.1 变量和表达式变量和表达式 使用使用usingusing简化命名空间内容的引用简化命名空间内容的引用 命名空间的别名命名空间的别名 2.1.5 命名空间 C#C#编程语言基础编程语言基础 第第2 2章章 2.22.2 流程控制流程控制 语句是定义了某项指令的有效的语句是定义了某项指令的有效的C#C#表达式,以分号结尾表达式,以分号结尾 。最短小的语句是空语句。最短小的语句是空语句。 可以用可以用把一些语句括起来成为一个语句块。把一些语句括起来成为一个语句块。 2.2.1 语句 C#C#编程语言基础编程语言基础 第第2 2章章 2.22.2 流程控制流程控制 ifif语句语句 2.2.2 分支结构 if if (条件)(条件) 语句;语句; if if (条件)(条件) 语句;语句; elseelse 语句;语句; if if (条件)(条件) 语句;语句; Else if(Else if(条件条件) ) 语句;语句; Else Else 语句;语句; C#C#编程语言基础编程语言基础 第第2 2章章 2.22.2 流程控制流程控制 switchswitch语句语句 switch ( switch (变量变量) ) case case 值值1 1 语句语句;break;break; default default 语句语句;break;break; 2.2.2 分支结构 C#C#编程语言基础编程语言基础 第第2 2章章 2.22.2 流程控制流程控制 whilewhile循环循环 while ( while (条件条件) ) 语句语句; 当条件为真时执行循环语句,在循环语句中必须有改当条件为真时执行循环语句,在循环语句中必须有改 变循环条件的语句,否则将可能是死循环。变循环条件的语句,否则将可能是死循环。 2.2.3 循环结构 C#C#编程语言基础编程语言基础 第第2 2章章 2.22.2 流程控制流程控制 dowhiledowhile循环循环 do do 语句语句; while ( while (条件条件) ) 当条件为真时执行循环语句,在循环语句中必须有改当条件为真时执行循环语句,在循环语句中必须有改 变循环条件的语句,否则将可能是死循环。但不管条件变循环条件的语句,否则将可能是死循环。但不管条件 真假,都会先执行一次循环体。真假,都会先执行一次循环体。 2.2.3 循环结构 C#C#编程语言基础编程语言基础 第第2 2章章 2.22.2 流程控制流程控制 forfor循环循环 for( for(初始化初始化; ;循环条件循环条件; ;循环条件增减量循环条件增减量) ) 语句语句; for for循环中的三个部分都是可选的。循环中的三个部分都是可选的。 2.2.3 循环结构 C#C#编程语言基础编程语言基础 第第2 2章章 2.22.2 流程控制流程控制 gotogoto语句语句 gotogoto 标签标签; ; 不能用不能用gotogoto从外部进入循环体;不能跳出类的范围和从外部进入循环体;不能跳出类的范围和 trycatchtrycatch后面的后面的finallyfinally块。块。 breakbreak语句语句 可以退出任何该语句所在的循环循环。可以退出任何该语句所在的循环循环。 continuecontinue语句语句 必须用于循环体,只能结束本次循环,进入下次循环必须用于循环体,只能结束本次循环,进入下次循环 returnreturn语句语句 退出该语句所处的函数。退出该语句所处的函数。 2.2.4 跳转语句 C#C#编程语言基础编程语言基础 第第2 2章章 2.32.3 复杂的变量类型复杂的变量类型 格式格式 enumenum typeNametypeName value1 value1; value2value2; ; 使用:使用:typeNametypeName varNamevarName; typeNametypeName = varName.value2 = varName.value2; 2.3.1 枚举 C#C#编程语言基础编程语言基础 第第2 2章章 2.32.3 复杂的变量类型复杂的变量类型 格式格式 structstruct typeNametypeName type value1 type value1; type value2type value2; ; 使用:使用:typeNametypeName varNamevarName; 结构和枚举都是在主函数外声明。结构和枚举都是在主函数外声明。 2.3.2 结构 C#C#编程语言基础编程语言基础 第第2 2章章 2.32.3 复杂的变量类型复杂的变量类型 一维数组一维数组 type type ArrayNameArrayName; 数组在使用前必须初始化。数组在使用前必须初始化。 1 1、intint Ary1=1,2,3,4,5 Ary1=1,2,3,4,5; 2 2、intint Ary1 = new int5;/ Ary1 = new int5;/默认初始化为默认初始化为0 0 3 3、intint Ary1 = new int51,2,3,4,5; Ary1 = new int51,2,3,4,5; 访问数组元素的方法:访问数组元素的方法: Ary1iAry1i 2.3.3 数组 C#C#编程语言基础编程语言基础 第第2 2章章 2.32.3 复杂的变量类型复杂的变量类型 foreachforeach循环循环 foreach(baseTypeforeach(baseType name in array) name in array) do something;do something; 说明:说明:namename将分别代表将分别代表arrayarray中的每个元素进行循环中的每个元素进行循环 运算,每次代表的元素都是只读的,不能在循环体内修改运算,每次代表的元素都是只读的,不能在循环体内修改 namename的内容。的内容。 2.3.3 数组 C#C#编程语言基础编程语言基础 第第2 2章章 2.32.3 复杂的变量类型复杂的变量类型 多维数组多维数组 type, name type, name; 赋值和使用都和一维数组一样。赋值和使用都和一维数组一样。foreachforeach循环也可以循环也可以 用于多维数组,用法一样。用于多维数组,用法一样。 数组的数组数组的数组 intint AryAry, 2.3.3 数组 C#C#编程语言基础编程语言基础 第第2 2章章 2.42.4 函数函数 格式:修饰格式:修饰 返回值类型返回值类型 函数名函数名( (参数列表参数列表) 函数的返回值函数的返回值 return return 返回值返回值; ; void void类型的函数中不能使用类型的函数中不能使用returnreturn语句。语句。 函数参数函数参数 函数定义中的参数为形式参数,调用函数时的参数为函数定义中的参数为形式参数,调用函数时的参数为 实际参数,默认实参传递是按值传递的,可以在定义时使实际参数,默认实参传递是按值传递的,可以在定义时使 用用refref关键字来表示某个参数是按引用传递的。关键字来表示某个参数是按引用传递的。 按值传递不会改变原参数值,而按引用传递则可以。按值传递不会改变原参数值,而按引用传递则可以。 2.4.1 函数的定义和使用 C#C#编程语言基础编程语言基础 第第2 2章章 2.42.4 函数函数 格式:修饰格式:修饰 返回值类型返回值类型 函数名函数名( (参数列表参数列表) 参数数组参数数组 格式格式 FunNameFunName(参数(参数i i,paramsparams Type Type 参数参数);); 调用时可以传多个参数。调用时可以传多个参数。 输出参数输出参数 用用outout关键字进行参数值的输出关键字进行参数值的输出 格式格式 FunNameFunName(参数(参数i i,out Type out Type 参数);参数); 2.4.1 函数的定义和使用 C#C#编程语言基础编程语言基础 第第2 2章章 2.42.4 函数函数 变量的作用域是可以访问该变量的代码区域。变量的作用域是可以访问该变量的代码区域。 只要变量所属的类在某个作用域内,该变量也在该作用只要变量所属的类在某个作用域内,该变量也在该作用 域内。域内。 局部变量存在于表示声明该变量的语句块结束的大括号局部变量存在于表示声明该变量的语句块结束的大括号 之前的作用域内。之前的作用域内。 同名的变量不能在相同的作用域内声明两次。同名的变量不能在相同的作用域内声明两次。 2.4.2 变量的作用域 C#C#编程语言基础编程语言基础 第第2 2章章 2.42.4 函数函数 mainmain函数是程序的入口,其返回值必须是函数是程序的入口,其返回值必须是intint或或voidvoid 类型,并且是类型,并且是publicpublic的。的。 mainmain函数的声明:函数的声明: public static public static intint main main(string string argsargs) 2.4.3 main函数 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 第三章第三章 C#C#面向对象程序设计面向对象程序设计 l l 3.13.1面向对象编程简介面向对象编程简介 l l 3.2 3.2 定义类定义类 l l 3.3 3.3 定义类成员定义类成员 l l 3.43.4类的更多内容类的更多内容 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 什么是面向对象编程什么是面向对象编程 面向对象编程代表了一种全新的程序设计思路面向对象编程代表了一种全新的程序设计思路 对象:变量和相关的方法的集合。其中变量表明对象对象:变量和相关的方法的集合。其中变量表明对象 的属性,方法表明对象所具有的行为。的属性,方法表明对象所具有的行为。 类:通常将属性及行为相同或相似对象归为一类。类类:通常将属性及行为相同或相似对象归为一类。类 可以看成是对象的抽象,代表了此类对象所具有的共可以看成是对象的抽象,代表了此类对象所具有的共 同属性和行为同属性和行为 属性和字段:通过属性和字段可以访问对象中包含的属性和字段:通过属性和字段可以访问对象中包含的 数据。数据。 方法:对象的所有行为都可以用方法来描述方法:对象的所有行为都可以用方法来描述 静态成员:可以在类的实例之间共享,可以看作是类静态成员:可以在类的实例之间共享,可以看作是类 的全局对象的全局对象 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 对象的生命周期对象的生命周期 每个对象都一个明确定义的生命周期,即从使用类定每个对象都一个明确定义的生命周期,即从使用类定 义开始一直到删除它为止。在对象的义开始一直到删除它为止。在对象的 生命周期中,除了生命周期中,除了“正在使用正在使用”的正常状态之外,还的正常状态之外,还 有两个重要的阶段:有两个重要的阶段: 构造阶段对象最初进行实例化的时期。这个初 始化过程称为构造阶段,由构造函数完成。 析构阶段在删除一个对象时,常常需要执行一 些清理工作,例如释放内存,由析构函数完成。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.1.2 OOP3.1.2 OOP技术技术 抽象与接口抽象与接口 继承继承 多态性多态性 重载重载 消息和事件消息和事件 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.2 3.2 定义类定义类 C#C#使用使用classclass关键字来定义类。其基本结构如下:关键字来定义类。其基本结构如下: Class MyClass / class members 还可以在类定义中指定继承。还可以在类定义中指定继承。C#C#支持类的单一继承,即只能有一支持类的单一继承,即只能有一 个基类,语法如下:个基类,语法如下: class MyClass : MyBaseClass / class members Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 接口的定义接口的定义 接口声明的方式与声明类的方式相似:接口声明的方式与声明类的方式相似: interface ImyInterface / interface members 接口的继承也可以用与类继承的类似方式来指定。主要的区别是接口的继承也可以用与类继承的类似方式来指定。主要的区别是 可以使用多个基接口:可以使用多个基接口: public interface IMyInterface : IMyBaseInterface, ImyBaseInterface2 / interface members Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.2.2 Object3.2.2 Object类类 所有的所有的.NET.NET类都派生于类都派生于System.ObjectSystem.Object。 如果在定义类时没有指定基类,编译器就会自动假定如果在定义类时没有指定基类,编译器就会自动假定 这个类派生于这个类派生于objectobject。 其重要性在于,自己定义的所有类除了自己定义的方其重要性在于,自己定义的所有类除了自己定义的方 法和属性外,还可以访问为法和属性外,还可以访问为ObjectObject定义的许多公共或定义的许多公共或 受保护的成员方法。受保护的成员方法。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.2.3 3.2.3 构造函数和析构函数构造函数和析构函数 构造函数构造函数 使用下述语法把简单的构造函数添加到一个类中: class MyClass public MyClass() / Constructor code / rest of class definition 这个构造函数与包含它的类同名,且没有参数,这是一个公 共函数,所以用来实例化类的对象。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 构造函数的执行序列构造函数的执行序列 为了实例化派生的类,必须实例化它的基类。而要实为了实例化派生的类,必须实例化它的基类。而要实 例化这个基类,又必须实例化这个基类的基类,这样例化这个基类,又必须实例化这个基类的基类,这样 一直到实例化一直到实例化System.ObjectSystem.Object为止。为止。 如果对一个类使用非默认的构造函数,默认的情况是如果对一个类使用非默认的构造函数,默认的情况是 在其基类上使用匹配十这个构造函数签名的构造函数在其基类上使用匹配十这个构造函数签名的构造函数 。如果没有找到这样的构造函数,就使用基类的默认。如果没有找到这样的构造函数,就使用基类的默认 构造函数。构造函数。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 析构函数析构函数 class MyClass MyClass() /destructor code 类的析构函数是用类名和前缀类的析构函数是用类名和前缀 来声明的。当进行无用存储单元收来声明的。当进行无用存储单元收 集时,就执行析构函数中的代码,释放资源。在调用这个析构函集时,就执行析构函数中的代码,释放资源。在调用这个析构函 数后,还将隐式地调用基类的析构函数,包括数后,还将隐式地调用基类的析构函数,包括System. ObjectSystem. Object根根 类中的类中的Finalize()Finalize()调用。调用。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.2.4 3.2.4 接口和抽象类接口和抽象类 类似之处:类似之处: 抽象类和接口都包含可以由派生类继承的成员。 接口和抽象类都不能直接实例化,但可以声明它们的变量。 区别:区别: 派生类只能继承一个基类,即只能直接继承一个抽象类(但可 以用一个继承链包含多个抽象类);类可以使用任意多个接口 抽象类可以拥有抽象成员和非抽象成员;接口成员必须都在 使用接口的类上执行它们没有代码体 接口成员被定义为公共的;抽象类的成员也可以是私有的、 受保护的、内部的或受保护的内部成员 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.2.5 3.2.5 类和结构类和结构 结构与类的区别在于:结构与类的区别在于: 结构是值类型,不是引用类型。它们存储在堆栈中 或存储为内联,其生存期的限制与简单的数据类型 一样。 结构不支持继承。 结构的构造函数的工作方式有一些区别。尤其是编 译器总是提供一个无参数的默认构造函数,这是不 允许替换的。 使用结构,可以指定字段如何在内存中布局 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.3 3.3 定义类成员定义类成员 成员定义成员定义 所有成员都有自己的访问级别,用下面的关键字之 来定义: public成员可以由任何代码访问。 private成员只能由类中的代码访问 internal成员只能由定义它的工程内部的代码访问。 proteded成员只能由类或派生类中的代码访问。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 定义字段定义字段 字段用标准的变量声明格式和前面介绍的修饰符来声字段用标准的变量声明格式和前面介绍的修饰符来声 明明 字段也可以使用关键字字段也可以使用关键字readonlyreadonly,表示这个字段只能,表示这个字段只能 在执行构造函数的过程中赋值,或由初始化赋值语句在执行构造函数的过程中赋值,或由初始化赋值语句 赋值。赋值。 字段可以使用字段可以使用staticstatic关键字声明为静态关键字声明为静态 可以使用关键字可以使用关键字constconst来创建一个常量来创建一个常量 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 定义方法定义方法 方法使用标准函数格式,以及可访问性和可选的方法使用标准函数格式,以及可访问性和可选的 staticstatic修饰符来声明修饰符来声明 可以在方法定义中使用下述关键字:可以在方法定义中使用下述关键字: virtual方法可以重写。 abstract方法必须重写(只用于抽象类中)。 override方法重写了一个基类方法(如果方法 被重写,就必须使用该关键字)。 extern方法定义放在其他地方。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 定义属性定义属性 属性定义的方式与字段定义的方式类似,但包含的内容比较多。属性拥有两个类属性定义的方式与字段定义的方式类似,但包含的内容比较多。属性拥有两个类 似函数的块,一个块用于获取属性的值,另一个块用于设置属性的值。似函数的块,一个块用于获取属性的值,另一个块用于设置属性的值。 这两个块分别用这两个块分别用getget和和setset关键字来定义,可以用于控制对属性的访问级别。可以关键字来定义,可以用于控制对属性的访问级别。可以 忽略其中的一个块来创建只读或只写属性忽略其中的一个块来创建只读或只写属性 属性的基本结构:属性的基本结构: public string SomeProperty get return “This is the property value“; set / do whatever needs to be done to set the property Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.3.2 3.3.2 类成员的其他议题类成员的其他议题 隐藏基类方法隐藏基类方法 调用重写或隐藏的基类方法调用重写或隐藏的基类方法 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 .3接口的实现接口的实现 接口成员的定义与类成员的定义也相似,但有几个重接口成员的定义与类成员的定义也相似,但有几个重 要的区别:要的区别: 不允许使用访问修饰符,所有的接口成员都是公 共的 接口成员不能包含代码体。 接口不能定义字段成员。 接口成员不能用关键字static,virtual, abstract或sealed来定义。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 在类中实现接口在类中实现接口 执行接口的类必须包含该接口所有成员的执行代码,执行接口的类必须包含该接口所有成员的执行代码, 且必须匹配指定的签名,并且必须是公共的。且必须匹配指定的签名,并且必须是公共的。 可以使用关键字可以使用关键字virtualvirtual或或abstractabstract来执行接口成员,来执行接口成员, 但不能使用但不能使用staticstatic或或constconst, 继承一个实现给定接口的基类,就意味着派生类隐式继承一个实现给定接口的基类,就意味着派生类隐式 地支持这个接口地支持这个接口 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.43.4类的更多内容类的更多内容 运算符重载运算符重载 要重载运算符,可给类添加运算符类型成员。指定 了要处理多少个操作数,以及这些操作数的类型。 一般情况下,操作数的类型与定义运算符的类类型 相同,但也可以定义处理混合类型的运算符 下述运算符可以重载: 一元运算符:+,-,!,+,-,true,false 二元运算符:+,-,*,/,%,|, 比较运算符:=,!=,= Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 转换运算符转换运算符 还可以定义类型之间的隐式和显式转换。如果要在不还可以定义类型之间的隐式和显式转换。如果要在不 相关的类型之间转换,这是必须的相关的类型之间转换,这是必须的 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.4.3 3.4.3 高级转换高级转换 封箱和拆箱封箱和拆箱 封箱(boxing)是把值类型转换为System.Object类 型,或者转换为由值类型执行的接口类型。拆箱 (unboxing)是相反的转换过程 封箱是在没有用户干涉的情况下进行的,但拆箱一 个值需要进行显式转换,即需要进行数据类型转换 封箱非常有用,有两个原因。 它允许使用集合中的值类型,集合中项目的类型是object 有一个内部机制允许在值类型上调用object Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 isis运算符运算符 is is运算符可以检查未知的变量运算符可以检查未知的变量( (该变量能用作对象参数,传送给一个方该变量能用作对象参数,传送给一个方 法法) )是否可为约定的类型,如果可以进行转换,该值就是是否可为约定的类型,如果可以进行转换,该值就是truetrue。在对对象。在对对象 调用方法前,可以使用该运算符查看执行该方法的对象的类型。调用方法前,可以使用该运算符查看执行该方法的对象的类型。isis运算运算 符不会检查两个类型是否相同,但可以检查它们是否兼容。符不会检查两个类型是否相同,但可以检查它们是否兼容。 isis运算符的语法如下:运算符的语法如下: is 这个表达式的结果如下: 如果是一个类类型,而也是该类型,或者它 继承了该类型,或者它封箱到该类型中,则结果为true。 如果是一个接口类型,而也是该类型,或者 它是实现该接口的类型,则结果为true。 如果是一个值类型,而也是该类型,或者它 被拆箱到该类型中,则结果为true。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 asas运算符运算符 asas运算将使用下面的语法,把一种类型转换为指定的运算将使用下面的语法,把一种类型转换为指定的 引用类型:引用类型: as 这只适用于下列情况: 的类型是类型 可以隐式转换为类型 可以封箱到类型.中 如果不能从显式转换为,则表达 式的结果就是null。从基类到派生类之间的转换可 以显式进行,但这常常是无效的。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.4.4 3.4.4 深度复制深度复制 使用受保护的方法使用受保护的方法System.Object.MemberwiseCloneSystem.Object.MemberwiseClone()() 进行引用复制,使用一个方法进行引用复制,使用一个方法GetCopyGetCopy() () 通过通过GetCopyGetCopy()()得到的引用复制有一个字段,它引用的得到的引用复制有一个字段,它引用的 对象与源对象相同。对象与源对象相同。 修改修改GetCopyGetCopy()()方法就可以进行深度复制,但最好使用方法就可以进行深度复制,但最好使用 .NET .NET FramewokFramewok的标淮方式。的标淮方式。 实现实现ICloneableICloneable接口,该接口有一个方法接口,该接口有一个方法Clone()Clone(),这,这 个方法不带参数,返回一个对象类型,其签名和个方法不带参数,返回一个对象类型,其签名和 GetCopyGetCopy()()方法相同。方法相同。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.4.5 3.4.5 定制异常定制异常 .NET .NET框架提供了一种用于报告错误的标准机制,称之为结构化异框架提供了一种用于报告错误的标准机制,称之为结构化异 常处理常处理(SEH(SEH,Structured Exception Handling)Structured Exception Handling)。 异常是描述错误的类。异常是描述错误的类。 .NET.NET架使用异常来报告错误,并且在代码中也可以使用异常。架使用异常来报告错误,并且在代码中也可以使用异常。 编写代码来监视任何代码段生成的异常。编写代码来监视任何代码段生成的异常。 在处理异常时要标识三个代码块:在处理异常时要标识三个代码块: 使用异常处理的代码块; 在处理第一个代码块时,如果找到某个异常,就执行代码块 在处理完异常之后执行选择的代码块。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 3.4.5 3.4.5 定制异常定制异常 在在C#C#中,异常的生成称之为抛出中,异常的生成称之为抛出(throwing)(throwing)异常。异常。 被通知抛出了一个异常则称之为捕获被通知抛出了一个异常则称之为捕获(catching)(catching)异常异常 处理完异常之后执行的代码块是终结处理完异常之后执行的代码块是终结(finally)(finally)代码块代码块 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 指定异常处理指定异常处理 C#C#的关键字的关键字trytry指定让某个代码块监视代码执行时抛出指定让某个代码块监视代码执行时抛出 的任何异常。使用的任何异常。使用trytry关键字很简单。使用时,关键字很简单。使用时,trytry关关 键字后面跟一对花括号,花括号中的语句用来监视代键字后面跟一对花括号,花括号中的语句用来监视代 码执行时抛出的异常。码执行时抛出的异常。 try /place satements here 在执行在执行trytry代码块中的任何语句时,如果有异常抛出,代码块中的任何语句时,如果有异常抛出, 就可以在代码中捕获该异常并相应进行处理。就可以在代码中捕获该异常并相应进行处理。 Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 捕获异常捕获异常 最简单形式的最简单形式的catchcatch代码块捕获前面代码块捕获前面trytry代码块中代码抛出的任何代码块中代码抛出的任何 异常。异常。catchcatch代码块的结构类似代码块的结构类似trytry代码块:代码块: try /place statements here catch /place statements here Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 捕获特定类的异常捕获特定类的异常 try /place statements here catch(Exception thrownException) /palce statements here Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3章章 出现异常之后进行消除出现异常之后进行消除 try /open files /read files catch /catch exceptions finally /close files Visual C#.NETVisual C#.NET程序设计基础教程程序设计基础教程 第第3 3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版高品质商品房预售协议合同范本解读
- 2025版天强建设工程有限公司承接XX学校教学楼及宿舍楼工程合同
- 2025版通信网络优化通信劳务分包合同规范文本
- 2025版全新民间借款合同利息计算及下载服务
- 2025版泰和泰大豆短量合同审查与诉讼代理服务合同
- 2025年度生猪屠宰与屠宰废弃物处理设施建设合同
- 2025年度多人持股企业股权转让及后续分红权益分配合同
- 2025标准私人别墅购置合同
- 2025版金融创新产品融资咨询与居间服务协议
- 2025年新能源汽车充电桩股份投资与运营管理协议
- DG-TJ08-2467-2025 超低能耗建筑设计标准(居住建筑)
- 养老机构风险防范课件
- 腰椎融合术后护理课件
- 炸药安全课件
- 新入职员工遵纪守法培训
- 中学新生入学培训
- 肿瘤科中医护理适应技术
- 专题:完形填空(含解析)六年级英语下册期末复习考点培优专项鲁教版(五四学制)(含答案解析)
- 口腔科护士核心职责与操作规范
- 死亡病例讨论病例汇报
- 人教版(2024)八年级(下)期末物理试卷(含解析)
评论
0/150
提交评论