《商务网站设计与开发》课件第07章 C#语言速览.pptx

上传人(卖家):momomo 文档编号:7674223 上传时间:2024-07-01 格式:PPTX 页数:40 大小:848.92KB
下载 相关 举报
《商务网站设计与开发》课件第07章 C#语言速览.pptx_第1页
第1页 / 共40页
《商务网站设计与开发》课件第07章 C#语言速览.pptx_第2页
第2页 / 共40页
《商务网站设计与开发》课件第07章 C#语言速览.pptx_第3页
第3页 / 共40页
《商务网站设计与开发》课件第07章 C#语言速览.pptx_第4页
第4页 / 共40页
《商务网站设计与开发》课件第07章 C#语言速览.pptx_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、 C#概述7.1 C#基本语法7.2 C#面向对象程序设计7.3 思考题7.4C#(读为C sharp)语言是一个多范式(multi-paradigm)的语言,它含有强类型(Strong Typing)、强制式(Imperative,或译为命令式、指令式)、声明式(Declarative)、函数式(Functional)、泛型(Generic)、面向对象(Object-Oriented)和面向组件(Component-Oriented)等程序设计语言特点。C#虽然脱胎于C/C+语言,也含有很多Java语言的优秀特性;与C/C+语言相似,降低了源代码的移植难度,也降低程序员对新语言的学习难度。可

2、以开发出客户端、Web服务器、移动设备等不同环境下的软件(需要.NET运行时的支持)。标识符l 标识符是代码的基本组成元素之一,它需要遵循一定的命名规范。在C#中,标识符可以以字母开始;可以以“_”(下划线)或“$”(美元符号)开始,也可以在标识符中包含下划线;可以包含数字,但不能以数字开始;可以包含Unicode编码的大小写字母,但大小写敏感(即ABC与abc是不同的标识符);可以在中间或前后包含符号。l C#的关键词(Keywords)是预定义的、具有特定含义的保留词,开发者不要使用这些词作为变量名或类名等。基本数据类型值类型l C#是中有两种基本数据类型:值类型和引用类型。值类型是直接存

3、储它的数据内容,而引用类型存储的是对象的引用,这两种类型对变量的赋值有着不同的含义。l C#值类型包括:简单类型和复合类型(其中包括结构类型、枚举类型)。l 简单类型都有对应于System程序集中的结构。比如,在c#中声明一个int类型的数据时,实际上声明了System.Int32的一个实例。l 在 C+中,bool 类型的值可转换为 int 类型的值,其中false 等效于零值,而 true 等效于非零值。但在 C#中,不存在 bool 类型与其他类型之间的相互转换。l C#中的字符是采用Unicode 编码方式,即一个字母或一个汉字都是用2个字节表示。char 类型的常数可以写成字符、十六

4、进制换码序列或 Unicode 表示形式。l C#值类型中的复合类型包括结构类型和枚举类型,其应用方式与C/C+中的相似。结构类型采用关键词struct来定义,枚举类型采用关键词enum来定义。分类分类类型名类型名 说明说明对应于对应于System中的结构中的结构取值范围取值范围字字节节直接量例子直接量例子整数整数sbyte有符号8位整数System.SByte从128 到+1271无short有符号16位整数System.Int16从32,768到+32,767 2无int有符号32位整数System.Int32从2,147,483,648到+2,147,483,6474十进制数:55,0,

5、-100十六进制数:0 xF5A4long有符号64位整数System.Int64从263到+26384294967296L分类分类类型名类型名说明说明对应于对应于System中的结构中的结构取值范围取值范围字字节节直接量例子直接量例子无符无符号整号整数数byte无符号8位整数System.Byte从0到2551十进制数:55,0,100十六进制数:0 xF5ushort无符号16位整数System.UInt16从0到65,5352 无uint无符号32位整数System.UInt32从0到4,294,967,2954123U,123uulong无符号64位整数System.UInt64从0到

6、26489223372036854775808UL分类分类类型名类型名说明说明对应于对应于System中的结构中的结构取值范围取值范围字字节节直接量例子直接量例子带符号带符号十进制十进制数数decimal128位十进制数System.Decimal从-7.0E28到7.0E2816 300.5m,12.30M浮点数浮点数float32位单精度浮点数System.Single从3.4E38到+3.4E38423.5F,23.5f,1.72E3F,1.72e3fdouble64位双精度浮点数System.Double从5.0E324到1.7E+308823.5,23D,23.5d,1.72E3分类

7、分类类型名类型名 说明说明对应于对应于System中的结构中的结构取值范围取值范围字字节节直接量例子直接量例子布尔型布尔型 bool布尔型System.Boolean true 或 false1true false字符字符charUnicode 字符 System.Char从u0000到uFFFF2A,u2FF9,x0058引用类型数组作为应用类型可以指向一个包含一个或多个特定类型元素的内存空间,采用索引可以访问到某一个数组元素。数组作为面向对象的程序设计语言,C#中所有的类型都是“类”。可以将上文中的值类型看作是预定义的类,而开发者的任务就是自定义类。类类型C#中的字符串可以通过System

8、.String类或string类型来定义,当然由于后者简单直观,多数开发者会选择使用string来定义字符串实例。字符串类型接口是一种包含成员定义却不给出实现的数据结构,一个接口变量就是一个实现了该接口的类的实例引用。接口委托(代表元)类似与C+中的函数指针类型,使用delegate来定义。通过委托,可以将函数作为参数进行传递,同时保持类型安全。委托object类型是C#中所有类型的基类,不论是引用类型还是值类型,不论是预定义类型还是用户自定义类型,都是直接或间接从 Object 继承的。对象类型数组的定义和使用方式如下例所示:int numbers=new int2;/定义并实例化数组对象n

9、umbers0=2;/通过索引为数组元素赋值int x=numbers0;/通过索引使用数组元素int numbers=new int5 20,1,42,15,34;/定义、实例化数组,并给各元素赋初值int numbers2=20,1,42,15,34;/效果同上var numbers3=new 20,1,42,15,34;/效果同上,根据初值确定数组元素类型int,numbers=new int3,3;/定义、实例化多维数组numbers1,2=2;/过索引为多维数组元素赋值 int,numbers2=new int3,3 2,3,2,1,2,6,2,4,5;/定义、实例化多维数组,并给各

10、元素赋初值 虽然C#中的字符串并非值类型,而是引用类型,但为了开发者使用方便,string重载了一些操作符,使得它应用起来就像是值类型一样。字符串定义和使用方式如下例所示:/定义、实例化字符串并赋初值string text=Hello World!;/查找字符串中的子串string substr=text.Substring(0,5);委托的定义和使用方式如下例所示:class Program delegate int Operation(int a,int b);/定义一个委托Operation static int Add(int i1,int i2)/此函数的形式与委托Operation

11、完全相同 return i1+i2;static int Sub(int i1,int i2)return i1-i2;static void Main()Operation op;/实例化一个委托 Op=Add;/将一个函数指派给它 int result1=op(2,3);/此时调用的是Add函数,结果为5 op=Sub;/将一个函数指派给它 int result2=op(10,2);/此时调用的是Sub函数,结果为8 值类型值类型 引用类型引用类型 内存分配地点内存分配地点 分配在栈中 分配在堆中 效率效率 效率高,不需要地址转换 效率低,需要进行地址转换 内存回收内存回收 使用完后,立即

12、回收 使用完后,不是立即回收,等待GC回收赋值操作赋值操作 进行复制,创建一个同值新对象 只是对原有对象的引用 函数参数与返回值函数参数与返回值 是对象的复制 是原有对象的引用,并不产生新的对象 类型扩展类型扩展 不易扩展 容易扩展,方便与类型扩展 变量的定义需要说明其类型和名称,且尽量在定义时同时给出初始取值。int a;/定义一个名为a 的变量int b;/定义一个名为b的变量b=35;/给变量b赋值int c=35;/定义一个名为c 的变量并赋初值int d,e;/定义名为d和e两个变量int f=2,g=3;/定义名为f和g两个变量并赋初值与变量不同,常量是指在程序执行过程中不可变的值

13、。C#使用const关键词来定义常量,如下例:const double PI=3.14;通过命名空间(Namespaces)可以给类分组,也可以区分“同名”的多个类,因为命名空间本身就是类名的一部分。命名空间的定义方式如下例:namespace FooNamespace /Members通过关键词using可以加载一个特定的命名空间,如下例:using FooNamespace;使用命名空间后,在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。这一特性对于团队软件开发和软件代码复用都很有利。操作符分类操作符分类操作符操作符四则运算四则运算+,-,*,/,%逻辑运算逻辑运算&,

14、|,!,&,|,true,false字符串串接字符串串接+自增、自减自增、自减+,-移位移位关系运算关系运算=,!=,=赋值运算赋值运算=,+=,-=,*=,/=,%=,&=,|=,=,=成员访问成员访问.索引索引操作符分类操作符分类操作符操作符类型转换类型转换()条件运算符条件运算符?:委派与去除委派委派与去除委派+,-创建对象创建对象new类型信息类型信息as is sizeof typeof溢出异常控制溢出异常控制checked unchecked引用与地址运算引用与地址运算*,-,&Null合并运算合并运算?Lambda表达式表达式=C#支持操作符重载(Operator overloa

15、ding,或译为运算符重载),代码如下列:public static Foo operator+(Foo foo,Bar bar)return new Foo(foo.Value+bar.Value);操作符类型操作符类型操作符操作符一元运算符一元运算符+,-,!,+,-,true,false二元运算符二元运算符+,-,*,/,%,&,|,比较运算符比较运算符=,!=,=C#继承了大多数C/C+的程序流程控制结构语句,包括分支语句、迭代语句(循环语句)、跳转语句和异常处理语句。分支语句可以使用if和else来完成,如下例:if(i=2).else .用switch和case来处理多种情况在每一

16、个case中都会使用break作为处理对应情况的代码的结尾,如果没有break,程序将跨越case继续往下执行,直到遇到break或switch语句结束。switch(ch)case A:.break;case B:.break;case C:case D:./C和D两种情况都执行这段代码 break;default:.break;迭代语句使用while、for或更方便的foreach来完成。while和for语句和C/C+中的语法相同,如下例:for(int i=0;i 10;i+).int i=0;while(i 10)/.i+;int i=0;do /.i+;while(i 10);在C

17、#中使用foreach语句可以更方便地遍历数组或集合类型中的全部元素,如下例所示:foreach(intnuminmyArray)Console.Writeline(num);C#的跳转语句可以用break、continue以及goto语句来完成。int e=10;for(int i=0;i e;i+)while(true)break;/跳出while循环,但不跳出for循环 .与break不同,continue语句不会退出循环,而是结束本次迭代,进入下一次迭代,如下例:int ch;while(ch=Console.Read()!=-1)if(ch=)continue;/跳过本次迭代的其它语

18、句,进入下次循环再次读取用户输入 .在C语言中如果代码考虑不周,可能会因为“被0除”、“网络不通”等问题使得程序直接退出或“死机”。在面向对象的程序设计语言中通常采用异常处理来解决这类问题。异常处理使用try、catch和finally来完成。其中try块包括了可能抛出异常的代码;catch块捕获异常并进行处理;不管有没有产生异常,finally块中的代码都将被执行。catch块中的ex是异常类Exception或其子类的对象实例。try ./可能抛出异常的部分catch(Exception ex)./捕获异常并进行处理finally ./try和catch块后总是被执行的部分对象:C#充分地

19、支持面向对象的程序设计特性。面向对象中最核心的概念之一就是“对象(Object)”。一个对象就是一个类型的实例(instance),而这个类型可以是值类型,也可以是引用类型,但两种类型在语法上没有区分。在C#中所有的类型(包括装箱后的值类型)都派生自System.Object类,它是所有类的基类。基类Object的成员可以被所有的类直接或间接地继承,这些成员主要包括:l Equals函数:支持对象之间进行比较;l Finalize函数:在对象被回收之前执行释放内存等操作;l GetType函数:获取当前对象实例的类型;l ToString函数:返回一个描述对象实例的字符串,通常返回类的名称。在

20、C#中,类(Class)就是类型,就是对象的模板。类中封装数据成员,也封装了对数据成员的进行操作的成员函数。类的定义如下例:class Foo /类的成员声明从C#2.0开始,可以采用partial关键词来将一个类的定义分割在多个文件中,这种方式形成的局部类定义在ASP.NET程序开发时被大量采用。局部类定义如下例:/File1.cs 第一个文件partial class Foo ./File2.cs 第二个文件partial class Foo .类的数据成员,也叫字段或类变量,是定义在类内用于存储数据,如下例所示:class Foo double foo;数据成员可以在定义时直接赋初值,如

21、下例所示:class Foo double foo=2.3;成员函数在C#中也叫做方法(method)。与C/C+语言相同,函数的作用都是为了封装特定的可重用代码,但与C/C+语言不同,C#中的函数必须是某个类的成员函数,即必须在某个类内定义。如下例所示:class Foo int Bar(int a,int b)return a%b;属性(property)在用法上和数据成员相似,但实际上是成员函数的组合体。一个属性可以包含两个函数,get函数和set函数,分别负责属性的访问和赋值。代码如下:class Person string name;string Name get return na

22、me;set name=value;Person person=new Person();person.Name=Robert;/给属性赋值,实际上是调用了set函数构造函数(constructor)是一种特殊的函数,当对象被创建的时候会调用相应的构造函数。构造函数的名称与类的名称完全相同,它的目的就是要在对象创建时初始化数据成员。一个类可以有多个构造函数,它们之间的区别是函数的参数不同。构造函数的定义如下例所示:class Foo Foo().对应于构造函数,析构函数(destructor)的目的是为了在对象回收时完成善后的工作,包括释放内存空间。从基类中继承的缺省的析构函数finalize

23、已经完成了基本的功能,如果没有特别需要善后的工作(比如释放网络资源等),就不必重新定义析构函数。实例化:在C#语言中初始化一个值类型的变量(也是对象实例)的方式与C语言中没有大的区别。如果要实例化一个引用类型的对象实例,则需要使用关键词new来创建。下例实例化了一个Foo类型的对象实例foo,代码如下:Foo foo=new Foo();其中与类名相同的Foo函数是类的构造函数。实例化之后就可以调用成员函数进行各种操作了,如下所示:int r=foo.Bar(7,2)Console.WriteLine(r);继承:类可以通过继承进行扩展,子类可以拥有父类的功能,并且可以进行修改或提供更多的功能

24、。面向对象中的继承特性对软件工程中代码重用的需求提供了支持。class A /定义类A public void Sum(int i,int j)int sum=i+j;Console.WriteLine(I am A,my sum=0,sum);class B:A /定义类B,并声明类B继承自类A public void Minus(int i,int j)int minus=i-j;Console.WriteLine(I am B,my minus=0,minus);/类B中虽然没有定义Sum函数,但由于继承的关系,/可以使用类A中定义的Sum函数 this.Sum(3,4);class I

25、nheritanceTest1 static void Main(string args)B b=new B();/下面代码输出:/I am B,my minus=-1 /I am A,my sum=7 b.Minus(3,4);Console.Read();访问修饰符(也叫继承修饰符)设置了类、方法和其它成员的可访问性,使用访问修饰符public、protected、internal或private可以为成员指定可访问性。public成员可以在任何地方进行访问。成员可以在任何地方进行访问。private成员只能在本类内进行访问,甚至于其子类都不能直接访问。protected成员只能在本类或子

26、类内进行访问。internal其所修饰的类或成员只能在当前程序集(本项目)中进行访问。protected internal所修饰的类或成员只能在当前程序集(本项目)或子类中进行访问。代码声明了两个类:Point和MainClass,由于Point类中的两个数据成员都是public的,因此可以直接从MainClass中访问Point的成员x和y。using System;class Point public int x;public int y;class MainClass static void Main()Point p=new Point();p.x=10;/直接访问p.x p.y=15

27、;/直接访问p.y Console.WriteLine(x=0,y=1,p.x,p.y);/输出:x=10,y=15 接口(interface)与类最大的不同是,接口只包含了成员的定义,却没有包含任何的实现。接口可以帮助在多个不同的类上定义相同的函数调用,当然函数的实现是有每个类分别给出的,即接口中只有函数的定义而没有实现。在接口中可以定义方法、属性和索引,这些成员被隐式地声明为public。下面的代码给出了一个接口的定义:interface IBinaryOperation double A get;set;double B get;set;double GetResult();其中,A与B

28、为属性,GetResult是方法。实现了上述的接口。public class Adder:IBinaryOperation public double A get;set;public double B get;set;public double GetResult()return A+B;实现了上述的接口。public class Multiplier:IBinaryOperation public double A get;set;public double B get;set;public double GetResult()return A*B;/实例化一个Adder类的对象,赋值给o

29、p,op就可以访问接口定义的成员了op=new Adder();op.A=2;op.B=3;result=op.GetResult();/5/实例化一个Multiplier类的对象,赋值给op,op就可以访问接口定义的成员了op=new Multiplier();op.A=5;op.B=4;result=op.GetResult();/20抽象类中也定义了没有实现的成员,也需要子类进行实现,这一特性与接口情况相同。但抽象类和接口还有许多不同点:l 抽象类中可以包含成员变量以及非抽象的方法或属性,但接口中不能包含这些;l 类之间只能进行单继承,但一个类可以同时实现一个或多个接口;l 抽象类中可以

30、包含非public成员,但接口中必须都是public成员;l 抽象类中可以包含常量或静态成员,但接口不能包含这些;l 抽象类中可以包含构造函数,接口没有构造函数。(1)C#是中有哪两种基本数据类型?与C/C+语言有何异同?(2)举例说明,在C#如何定义一个一维数组,如何给数组赋初值?(3)举例说明,在C#如何定义一个二维数组,如何给数组赋初值?(4)C#中值类型和引用类型在内存回收、赋值操作、函数参数传递等方面有何区别?(5)什么是命名空间?它的主要作用是什么?(6)相比for语句,foreach语句的主要优点是什么?在哪些情况下适合使用foreach语句?(7)什么是类?什么是对象?如何实例化一个对象?(8)什么是类的数据成员?什么是类的成员函数?(9)如何定义类的属性?属性的作用是什么?(10)构造函数和析构函数的作用是什么?举例说明,如何定义一个构造函数?(11)试说明访问修饰符public、protected、private对类成员的可访问性如何控制?(12)举例说明,如何定义一个接口?接口和抽象类有何不同?

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《商务网站设计与开发》课件第07章 C#语言速览.pptx)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|