




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 c#编程基础讲解提纲n2.1 c#语言简介 n2.2 c#数据类型 n2.3 运算符 n2.4 c#中的控制语句 n2.5 c#面向对象程序设计基础 n2.6 c#面向对象高级特性 第2章 c#编程基础n学习目的与要求:学习目的与要求:n本章将介绍microsoft为.net框架设计的c#语言,c#是一种功能强大的面向对象和类型安全的编程语言,支持类、接口、封装、抽象等功能。开发人员可以使用c#语言创建任何一种.net应用程序。n通过对本章的学习,读者应重点掌握c#数据类型、常量、变量、循环语句、选择语句等内容。本章的难点是类的声明、对象的定义、c#类的继承与多态、c#的重载与接口等内
2、容。2.1 c#语言简介nc#是微软公司专门为.net量身定做的语言,它与.net有着密不可分的关系。nc#的类型就是.net框架所提供的类型,其本身并无类库,而是直接使用.net框架所提供的类库。n类型安全检查、结构化异常处理也都是交给公共语言运行库处理的。因此,c#是最适合开发.net应用的编程语言。2.1.1 c#语言的特点nc#语言的特点主要包括如下几个方面。n(1)语法简洁n(2)面向对象设计n(3)与web的紧密结合n(4)灵活性和兼容性2.1.2 关键字和标识符n1关键字关键字abstractabstractdodoininprotectedprotectedtruetrueas
3、asdoubledoubleintintpublicpublictrytrybasebaseelseelseinterfaceinterfacereadonlyreadonlytypeoftypeofboolboolenumenuminternalinternalrefrefuintuintbreakbreakeventeventisisreturnreturnulongulongbytebyteexplicitexplicitlocklocksbytesbyteuncheckeduncheckedcasecaseexternexternlonglongsealedsealedunsafeun
4、safecatchcatchfalsefalsenamespacenamespaceshortshortushortushortcharcharfinallyfinallynewnewsizeofsizeofusingusingcheckedcheckedfixedfixednullnullstackallocstackallocvirtualvirtualclassclassfloatfloatobjectobjectstaticstaticvolatilevolatileconstconstforforoperatoroperatorstringstringvoidvoidcontinue
5、continueforeachforeachoutoutstructstructwhilewhiledecimaldecimalgotogotooverrideoverrideswitchswitchdefaultdefaultififparamsparamsthisthisdelegatedelegateimplicitimplicitprivateprivatethrowthrow2标识符标识符 在c#语言中,标识符的命名规则如下:u标识符不能与c#语言中的关键字同名。u标识符只能由字母、数字、下划线组成。u标识符必须以字母开头或以符号开始。u标识符不能与c#语言中的库函数同名。u标识符中
6、不能包含空格、斜杠、运算符及标点符号等特殊符号。2.1.2 关键字和标识符 nc#的标识符区别大小写,例如下面的三个标识符是不同的。nmembernmembernmember nc#的标识符不能与关键字相同,但是可以使用前缀来避免这种冲突,例如: while while 上面两个单词中第一个单词是合法的标识符,而第二个单词不是合法标识符,因为while是个关键字。2.2 c#数据类型 2.2.1 简单类型概述n值类型通常用来表示基本类型、简单类型。c#的值类型主要包括:n整数类型n布尔类型n实数类型n字符类型n结构类型n枚举类型整数类型nc#定义了8种整数类型数据类型特 征取值范围sbyte有
7、符号8位整数128127byte无符号8位整数0255short有符号的16位整数3276832767ushort无符号的16位整数065535int有符号的32位整数2 147 482 6482 147 483 647uint无符号的32位整数04 294 967 295long有符号的64位整数9 223 372 036 854 775 8089 223 372 036 854 775 807ulong无符号的64位整数018 446 744 073 709 551 615布尔类型 n布尔类型用来表示“真”和“假”两个逻辑概念.在c和c+语言中,用0来表示“假”,用非“0”的值表示“真”,
8、但是c#语言中对上述表示进行的限制,c#中布尔类型只能取“真”和“假”两个值,分别用true和false两个关键字来表示 nbool x 1; /错误 ,不存在这种写法;nbool x true; /正确 浮点类型nc#采用两种数据类型来表示小数:单精度(float)和双精度(double),两者的差异主要取决于取值范围和精度。 数据类型精 度取值范围float7位有效数字1.51045 3.41038double1516位有效数字5.010324 1.710308decimal2829位有效数字1.010287.91028字符类型nc#提供字符(char)处理ascii字符和unicode编
9、码的字符,nascii字符是美国标准委员会提供的,采用7位二进制表示的字符。nunicode是国际标准化组织制定的采用16位二进制表示的字符,它可以表示世界上大多数语言。 结构类型n有时需要将不同类型的数据组合成一个有机的整体以便使用,例如要编制一个学生信息管理系统,对全校学生的信息进行管理,一个学生具有学号、姓名、性别、年龄、地址等信息,如果使用简单数据类型分布存储这些信息的话,很难完成反映出这些信息的内在联系,所以应该将它们组织成一个整体。nc#语言提供了结构类型,允许用户根据实际的需要实现特定的数据类型 struct teacher public string name; public
10、uint age; public string phone; public string address;namespace structs class program static void main(string args) teacher t; t.name = 小刘; t.age = 35; t.phone = 123456789; t.address= 北京大学; console.writeline(该老师姓名=0,年龄=1,电话=2,通讯地址=3, t.name, t.age, t.phone, t.addressl); 在main()函数中编写结构类型的实用方法,其代码如下:co
11、nsole类方法nconsole类表示控制台应用程序的标准输入流、输出流和错误流。方法名称描述read从标准输入流读取下一个字符readline从标准输入流读取下一行字符write将指定的信息写入标准输出流writeline将指定的数据写入标准输出流枚举类型n在程序设计中,有时会用到由若干个有限数据元素组成的集合,可将这些数据集合定义为枚举类型(enum)。n枚举类型定义的一般形式为: enum 枚举名n 枚举值表 ; 在枚举值表中应罗列出所有可用值,这些值也称为枚举元素。 namespace enums enum weekdaysun,mon,tue,wed,thu,fri,sat; cla
12、ss program static void main(string args) weekday day; day = weekday.sun; console.writeline(day的值是0, day); 在vs中建立一个名称为enums的控制台应用程序,在program类中输入以下代码:2.2.2 引用类型引用类型,其含义是该类型的变量不直接存储所包含的值,而是指向它所要存储值的地址.在c#中提供以下引用类型给你使用:n1类类n2数组数组n3代理代理n4接口接口类类型n类是面向对象编程的基本单位,它是一种包含数据成员,函数成员和嵌套类型的数据结构。类的数据成员有变量,域和事件,函数成员
13、包括方法,属性,构造函数和析构函数。nc#中两个经常用到的类分别是object类和string类。类与对象的关系studentnameid类student:s1name:小红id:0101student:s2name:小明id:0102建立建立对象/实例数组n同c语言一样,c#语言中也有数组类型,一个数组包含有通过计算下标访问的变量,所有包含于数组中且被当作元素的变量必须是同一类型。这种类型自然被称为“数组类型”。n数组声明格式:数据类型 数组名n注意:方括号必须跟在类型后面,而不是标识符后面;数组大小不是其数组定义的一部分namespace arrays class program stat
14、ic void main(string args) int arr1 = new int2; /定义一维数组 int arr2 = new int 1, 2, 3 ;/定义一维数组,并初始化数组 string arr3 = “six”, “is”, “me” ;/定义一维数组,并初始化数组 int, arr4=1,2,3,4; int, arr5 = new int3, 4; for (int i = 0; i arr1.length; i+) arr1i = i * i * i; console.writeline(arr10=1, i, arr1i); for (int i = 0; i
15、4; i+) for (int j = 0; j 3; j+) arr5j, i = i * j; console.writeline(arr50,1=2, j, i, arr5j, i); 代理类型(委托)n委托就是定义一种变量来指代一个函数或者一个方法。n委托使用分三步:1、委托声明 2、委托实例化 3、委托调用创建一个名称为delegates的控制台应用程序namespace delegates delegate int mydelegate(); class myclass public int instmethod() console.writeline(call the instm
16、ethod.); return 0; class program static void main(string args) myclass p = new myclass(); mydelegate d=new mydelegate(p.instmethod ); d(); 接口类型n接口描述了组件对外提供的服务。在组件与组件之间、组件与客户之间都通过接口进行交互。例如:interface 收费 void showmoney();/收费标准class 公交车:收费 void showmoney() console.write(“公交车收费是1元”);/必须要实现接口中的方法 namespac
17、e interfaces interface ishowmoney void getmoney(); class busmoney : ishowmoney public void getmoney() console.writeline(公交收费一元); class program static void main(string args) busmoney b = new busmoney(); b.getmoney(); 2.3 运 算 符 在c#语言中,和其他编程语言一样,具有多种运算符。c#语言中的运算符大体上分为6种:算术运算符条件运算符逻辑运算符关系运算符赋值运算符成员访问运算符
18、2.4 c#中的控制语句nc#程序的执行是由一系列按照文本顺序执行的语句进行的,c#的常用语句包括:n基本语句n条件语句n循环语句n跳转语句n异常处理语句2.4.1 选择语句1. if语句语句(1)if语句的语法格式一:if(表达式) 程序语句块1(2)if语句的语法格式二:if(表达式) 程序语句块1else程序语句块22.4.1 选择语句(3)if语句的语法格式三:if(表达式) 程序语句块1else if程序语句块2else 程序语句块32.4.1 选择语句2. switch语句语句switch语句的语法格式如下:switch(表达式) case 表达式1: 程序语句块1;case 表达
19、式2: 程序语句块2;.case 表达式n-1: 程序语句块n-1;default: 程序语句块n;2.4.1 选择语句每一个switch语句最多只能有一个default标号分支。switch语句的执行方式如下。(1) 首先计算出switch表达式的值。(2) 如果switch表达式的值等于某一个switch分支的常量表达式的值,那么程序控制跳转到这个case标号后的语句列表中。(3) 如果switch表达式的值无法与switch语句中任何一个case常量表达式的值匹配而且switch语句中有default分支,程序控制会跳转到default标号后的语句列表中。(4) 如果switch表达式的
20、值无法与switch语句中任何一个case常量表达式的值匹配而且switch语句中没有default分支,程序控制会跳转到switch语句的结尾。(5) 如果程序执行遇到break语句,则自动跳出switch语句。2.4.2 循环结构循环用于重复执行一组语句。循环可分为三类:第一类是在条件变为false之前重复执行语句,第二类是在条件变为true之前重复执行语句,第三类是按照指定的次数重复执行语句。在c#中可使用的循环语句有4种格式。(1)do . while:当(或直到)条件为true时循环。(2)while:当条件为true时循环。(3)for:指定循环次数,使用计数器重复运行语句。(4)
21、foreach:对于集合中的每项或数组中的每个元素,重复执行。2.4.2 循环结构for循环循环 for循环是循环类型中最复杂的,但也是最为常用的。 c#中for语句的基本语法为:for (初始化表达式; 条件表达式; 迭代表达式) 循环语句 2.4.2 循环结构4foreach语句语句foreach循环是for循环的一种特殊表现形式,如果想遍历集合或者数组中的所有条目,使用foreach是很好的解决方案。foreach语句的语法格式如下:foreach (局部变量 in 集合)循环语句代码如下:namespace foreach class program static void main(
22、string args) int num=1,2,3,4,5,6,7,8,9,10; foreach (int i in num) console .write (i); 2.4.3 跳转语句1break语句语句2continue语句语句 2.4.4 异常处理 nc#的异常可能由两种方式导致。 (1)throw语句无条件抛出异常。(2)c#语句和表达式执行过程中激发了某个异常的条件,使得操作无法正常结束,从而引发异常。例如,整数除法操作分母为零时将抛出一个异常。n异常由try语句来处理,try语句提供了一种机制来捕捉执行过程中发生的异常。try语句有3种基本格式:ntry . catchntr
23、y . finallyntry . catch . finally2.4.4 异常处理1try . catch结构结构2tryfinally结构结构 3try . catch . finally结构结构 识别不同的异常nexception :程序中的所有异常nformatexception:数据格式异常noverflowexception:数据溢出异常ndividebyzeroexception:分母为零异常trycatchnamespace trycatch class program static void main(string args) long factorial = 1; lon
24、g num = 100; try checked for (long cur = 1; cur = num; cur+) factorial *= cur; catch (overflowexception oe) console.writeline(计算计算0的阶乘时引发溢出异常的阶乘时引发溢出异常, num); console.writeline(0, oe.message); return; console.writeline(0的阶乘是的阶乘是1, num, factorial); 数据溢出异常tryfinallyn不管try子句是如何退出的,程序的控制权最后都会转移到finally子
25、句执行。namespace tryfinallys class program static void main(string args) try console .writeline (执行try子句!); goto leave; finally console .writeline (执行finally子句!); leave: console.writeline(执行leave标签!); trycatchfinallynamespace trycatchfinallys class program static void main(string args) try throw (new a
26、rgumentnullexception(); catch (argumentnullexception e) console.writeline(exception:0, e.message); finally console.writeline(执行finally子句); 2.5 c#面向对象程序设计基础n面向对象的世界中,一定会遇到的两个名词就是:对象和类。类在面向对象观念中可视为对象的“模板”、“蓝图”。对象都是独一无二的,这些差异会反映在对象的属性值上。n与传统的面向过程的编程方法相比,面向对象编程方法有3个优点: n程序的可维护性好。 n程序容易修改。n对象可以使用多次,可重用性好
27、。2.5.1 类声明nc#是面向对象的编程语言。如果使用新的类,则必须在使用之前声明它。当类被成功地声明后,就可以当作一种新的类型来使用,这些新声明的类都属于引用类型。在c#中使用关键字class来声明类,使用new关键字可以建立类的一个实例,如下所示:class a class b void f() a a = new a();n以上代码在类b的方法f中创建了一个类a的实例。2.5.2 继承n为了提高软件模块的可重用性和可扩充性,以提高软件的开发效率,因此希望能够利用前人或自己以前的开发成果。为此,任何面向对象的程序设计语言都能够提供两个重要的特性:继承性(inheritance)和多态性(
28、polymorphism)。n在vs2008中建立一个名称为“derived”的控制台应用程序,在program.cs文件中输入以下代码:n程序中,类deriveda继承了basea,这样deriveda就包含了basea的方法。上述代码运行后,其输出结果如图所示。namespace derived class basea public void funca() system.console.writeline(funciton a); class deriveda : basea public void funb() system.console.writeline(funciton b);
29、 class program static void main(string args) deriveda aderived = new deriveda(); aderived.funca(); aderived.funb(); 2.5.3 类的访问修饰符2.5.4 构造函数和析构函数n构造函数用于执行类实例的初始化。每个类都有构造函数,即使没有声明它,编译器也会自动提供一个默认的构造函数。在访问一个类的时候,系统将最先执行构造函数中的语句。构造函数有以下特性:n一个类的构造函数通常与类名相同。n构造函数不声明返回类型。n构造函数总是public类型的。2.5.4 构造函数和析构函数n构造函
30、数和析构函数是类的两个特殊函数,都是系统自动调用的。当创建对象的时候,自动调用构造函数,执行其中语句。当程序执行完毕的时候,系统自动调用析构函数。析构函数,用于专门释放被占用的系统资源。2.5.5 this关键字 nthis关键字仅局限在构造函数、类的方法和类的实例中使用。在类的函数中出现的this 作为一个值类型时,表示正在构造的对象本身的引用。 2.5.6 static关键字n1. 用在类里的属性、方法前面,这样的静态属性与方法不需要创建实例就能访问, 通过类名或对象名都能访问它; n2. 方法内部的静态变量: 方法内部的静态变量,执行完静态变量值不消失,再次执行此对象的方法时,值仍存在,
31、 这是与局部变量最大的区别; namespace static public class person private int id; public static int total = 0; public person() total+; id = total; class program static void main(string args) person.total=100; console.writeline(person.total); person c = new person(); console.writeline(person.total); 2.6 c#面向对象高级特性
32、n与其他的面向对象语言一样,c#支持多态性、虚方法、函数的重载等。n除此之外,c#还提供一种特殊的数据形态“装箱”。 2.6.1 多态性n在c#中,多态性(polymorphism)的定义是:“同一操作作用于不同类的实例时,不同的类将进行不同的解释,最后产生不同的执行结果”。nc#支持两种类型的多态性。一是编译时的多态性。编译时的多态是通过重载来实现的。对于非虚的成员来说、系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。二是运行时的多态性。运行时的多态性是直到系统运行时,才根据实际情况决定实现何种操作。在c#中,运行时的多态性通过虚方法实现。编译时的多态性提供了运行速度快的特点
33、,而运行时的多态性则带来了高度灵活和抽象的特点。2.6.2 虚方法n类的方法前如果加上了virtual修饰符,就称为虚方法,反之为非虚方法。 n在vs2008中建立一个名称为“virtuals”的控制台应用程序,在program.cs文件中输入以下代码:n调用虚方法运行时将确定调用对象是什么类的实例,并调用合适的覆写(override)的方法从而实现多态。namespace virtuals class test static void main(string args) base b = new base(); b.draw(); derived d = new derived(); d.d
34、raw(); d.fill(); base obj = new derived (); obj.fill(); obj.draw(); class base public void fill() console.writeline(调用base类中的fill方法); public virtual void draw() console.writeline(在虚方法中调用base类中的draw方法); class derived : base public override void draw() console.writeline(调用derived子类中的draw方法); public ne
35、w void fill() console.writeline(调用deriveed子类中的fill方法); 虚方法示例: 1、定义一个员工类的虚方法:class employee protected string _name; public employee(string name) _name = name; public virtual void starword() console.writeline(_name + 开始工作:); 2、派生一个经理类:class manager : employee public manager(string name) : base(name) p
36、ublic override void starword() base.starword(); console.writeline(给员工下达任务); 3、再派生一个销售类:class seller : employee public seller(string name) : base(name) public override void starword() base.starword(); console .writeline (销售产品); 4、在主函数中调用类中的方法: class program static void main(string args) employee emp
37、= new employee4; emp0 = new manager(张三); emp1 = new seller(李四); emp2 = new seller(王五); foreach (employee e in emp) e.starword(); 2.6.3 抽象类n抽象类使用abstract修饰符,它不能直接实例化,只能被其他类继承。在继承的类中必须对抽象类中的抽象方法进行重写,不然该派生类依然是抽象的。n在vs2008中建立一个名称为“abstracts”的控制台应用程序,在program.cs文件中输入以下代码:namespace abstracts abstract public class window /抽象的类 public window(int top, int left) this.top =top; this.left = left; abstr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度夫妻双方婚内财产共有权益保全与分割协议
- 2025年度个人购房合同附带社区健康体检及健身服务合同
- 2025年度大数据中心清包工劳务服务协议
- 2025年度商业信用贷款借款版合同
- 2025年度家长与孩子共同成长保障协议
- 2025年度商业地产车位赠送及管理服务合同
- 游轮用水补给服务合同
- 2025年度公司销售业务员协议书:全面升级版合作协议
- 2025年度保密协议陷阱防范与合同纠纷处理合同
- 专家评审费劳务合同范本
- DB32/T 4443-2023 罐区内在役危险化学品(常低压)储罐管理规范
- GB/T 678-2023化学试剂乙醇(无水乙醇)
- 新能源汽车电池石墨类负极材料一体化项目环境影响评价报告书
- 高中英语-what's in a name教学课件设计
- 小学家长接送学生协议书
- 小儿腹泻病诊疗规范
- IT服务连续性实现指南
- 采煤机维护培训手册(电气)
- 教科版高中信息技术(2019)必修一全册教案
- 行政确认专题教育课件
- 消化性溃疡诊疗(症状、病因、诊断与治疗)
评论
0/150
提交评论