《商务网站设计与开发》课件第07章 C#语言速览_第1页
《商务网站设计与开发》课件第07章 C#语言速览_第2页
《商务网站设计与开发》课件第07章 C#语言速览_第3页
《商务网站设计与开发》课件第07章 C#语言速览_第4页
《商务网站设计与开发》课件第07章 C#语言速览_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

内容7.1C#概述7.2C#基本语法7.3C#面向对象程序设计7.4思考题7.1C#概述C#(读为Csharp)语言是一个多范式(multi-paradigm)的语言,它含有强类型(StrongTyping)、强制式(Imperative,或译为命令式、指令式)、声明式(Declarative)、函数式(Functional)、泛型(Generic)、面向对象(Object-Oriented)和面向组件(Component-Oriented)等程序设计语言特点。C#虽然脱胎于C/C++语言,也含有很多Java语言的优秀特性;与C/C++语言相似,降低了源代码的移植难度,也降低程序员对新语言的学习难度。可以开发出客户端、Web服务器、移动设备等不同环境下的软件(需要.NET运行时的支持)。7.2C#基本语法标识符标识符是代码的基本组成元素之一,它需要遵循一定的命名规范。在C#中,标识符可以以字母开始;可以以“_”(下划线)或“$”(美元符号)开始,也可以在标识符中包含下划线;可以包含数字,但不能以数字开始;可以包含Unicode编码的大小写字母,但大小写敏感(即ABC与abc是不同的标识符);可以在中间或前后包含@符号。C#的关键词(Keywords)是预定义的、具有特定含义的保留词,开发者不要使用这些词作为变量名或类名等。7.2C#基本语法基本数据类型——值类型C#是中有两种基本数据类型:值类型和引用类型。值类型是直接存储它的数据内容,而引用类型存储的是对象的引用,这两种类型对变量的赋值有着不同的含义。C#值类型包括:简单类型和复合类型(其中包括结构类型、枚举类型)。简单类型都有对应于System程序集中的结构。比如,在c#中声明一个int类型的数据时,实际上声明了System.Int32的一个实例。在C++中,bool类型的值可转换为int类型的值,其中false等效于零值,而true等效于非零值。但在C#中,不存在bool类型与其他类型之间的相互转换。C#中的字符是采用Unicode编码方式,即一个字母或一个汉字都是用2个字节表示。char类型的常数可以写成字符、十六进制换码序列或Unicode表示形式。C#值类型中的复合类型包括结构类型和枚举类型,其应用方式与C/C++中的相似。结构类型采用关键词struct来定义,枚举类型采用关键词enum来定义。7.2C#基本语法分类类型名说明对应于System中的结构取值范围字节直接量例子整数sbyte有符号8位整数System.SByte从−128到+1271无short有符号16位整数System.Int16从−32,768到+32,7672无int有符号32位整数System.Int32从−2,147,483,648到+2,147,483,6474十进制数:55,0,-100十六进制数:0xF5A4long有符号64位整数System.Int64从−263到+26384294967296L7.2C#基本语法分类类型名说明对应于System中的结构取值范围字节直接量例子无符号整数byte无符号8位整数System.Byte从0到2551十进制数:55,0,100十六进制数:0xF5ushort无符号16位整数System.UInt16从0到65,5352

无uint无符号32位整数System.UInt32从0到4,294,967,2954123U,123uulong无符号64位整数System.UInt64从0到26489223372036854775808UL7.2C#基本语法分类类型名说明对应于System中的结构取值范围字节直接量例子带符号十进制数decimal128位十进制数System.Decimal从-7.0E28到7.0E2816300.5m,12.30M浮点数float32位单精度浮点数System.Single从−3.4E38到+3.4E38423.5F,23.5f,1.72E3F,1.72e3fdouble64位双精度浮点数System.Double从±5.0E−324到±1.7E+308823.5,23D,23.5d,1.72E37.2C#基本语法分类类型名说明对应于System中的结构取值范围字节直接量例子布尔型bool布尔型System.Booleantrue或false1truefalse字符charUnicode字符System.Char从'\u0000'到'\uFFFF'2‘A’,'\u2FF9','\x0058'7.2C#基本语法引用类型数组数组作为应用类型可以指向一个包含一个或多个特定类型元素的内存空间,采用索引可以访问到某一个数组元素。类类型作为面向对象的程序设计语言,C#中所有的类型都是“类”。可以将上文中的值类型看作是预定义的类,而开发者的任务就是自定义类。字符串类型C#中的字符串可以通过System.String类或string类型来定义,当然由于后者简单直观,多数开发者会选择使用string来定义字符串实例。接口接口是一种包含成员定义却不给出实现的数据结构,一个接口变量就是一个实现了该接口的类的实例引用。委托委托(代表元)类似与C++中的函数指针类型,使用delegate来定义。通过委托,可以将函数作为参数进行传递,同时保持类型安全。对象类型object类型是C#中所有类型的基类,不论是引用类型还是值类型,不论是预定义类型还是用户自定义类型,都是直接或间接从Object继承的。7.2C#基本语法数组的定义和使用方式如下例所示:int[]numbers=newint[2];//定义并实例化数组对象numbers[0]=2;//通过索引为数组元素赋值intx=numbers[0];//通过索引使用数组元素

int[]numbers=newint[5]{20,1,42,15,34};//定义、实例化数组,并给各元素赋初值int[]numbers2={20,1,42,15,34};//效果同上varnumbers3=new[]{20,1,42,15,34};//效果同上,根据初值确定数组元素类型

int[,]numbers=newint[3,3];//定义、实例化多维数组numbers[1,2]=2;///过索引为多维数组元素赋值int[,]numbers2=newint[3,3]{{2,3,2},{1,2,6},{2,4,5}};//定义、实例化多维数组,并给各元素赋初值7.2C#基本语法虽然C#中的字符串并非值类型,而是引用类型,但为了开发者使用方便,string重载了一些操作符,使得它应用起来就像是值类型一样。字符串定义和使用方式如下例所示://定义、实例化字符串并赋初值stringtext="HelloWorld!";//查找字符串中的子串stringsubstr=text.Substring(0,5);7.2C#基本语法委托的定义和使用方式如下例所示:classProgram{delegateintOperation(inta,intb);//定义一个委托Operation

staticintAdd(inti1,inti2)//此函数的形式与委托Operation完全相同

{returni1+i2;}

staticintSub(inti1,inti2)

{returni1-i2;}

staticvoidMain(){Operationop;//实例化一个委托Op=Add;//将一个函数指派给它intresult1=op(2,3);//此时调用的是Add函数,结果为5op=Sub;//将一个函数指派给它intresult2=op(10,2);//此时调用的是Sub函数,结果为8

}}7.2C#基本语法值类型

引用类型

内存分配地点

分配在栈中

分配在堆中

效率

效率高,不需要地址转换

效率低,需要进行地址转换

内存回收

使用完后,立即回收

使用完后,不是立即回收,等待GC回收赋值操作

进行复制,创建一个同值新对象

只是对原有对象的引用

函数参数与返回值

是对象的复制

是原有对象的引用,并不产生新的对象

类型扩展

不易扩展

容易扩展,方便与类型扩展

7.2C#基本语法变量的定义需要说明其类型和名称,且尽量在定义时同时给出初始取值。inta; //定义一个名为a的变量intb; //定义一个名为b的变量b=35; //给变量b赋值intc=35; //定义一个名为c的变量并赋初值intd,e; //定义名为d和e两个变量intf=2,g=3; //定义名为f和g两个变量并赋初值与变量不同,常量是指在程序执行过程中不可变的值。C#使用const关键词来定义常量,如下例:constdoublePI=3.14;7.2C#基本语法通过命名空间(Namespaces)可以给类分组,也可以区分“同名”的多个类,因为命名空间本身就是类名的一部分。命名空间的定义方式如下例:namespaceFooNamespace{//Members}通过关键词using可以加载一个特定的命名空间,如下例:usingFooNamespace;使用命名空间后,在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。这一特性对于团队软件开发和软件代码复用都很有利。7.2C#基本语法操作符分类操作符四则运算+,-,*,/,%逻辑运算&,|,^,!,~,&&,||,true,false字符串串接+自增、自减++,--移位<<,>>关系运算==,!=,<,>,<=,>=赋值运算=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=成员访问.索引[]操作符分类操作符类型转换()条件运算符?:委派与去除委派+,-创建对象new类型信息asissizeoftypeof溢出异常控制checkedunchecked引用与地址运算*,->,[],&Null合并运算??Lambda表达式=>7.2C#基本语法C#支持操作符重载(Operatoroverloading,或译为运算符重载),代码如下列:publicstaticFoooperator+(Foofoo,Barbar){returnnewFoo(foo.Value+bar.Value);}操作符类型操作符一元运算符+,-,!,~,++,--,true,false二元运算符+,-,*,/,%,&,|,^,<<,>>比较运算符==,!=,<,>,<=,>=7.2C#基本语法C#继承了大多数C/C++的程序流程控制结构语句,包括分支语句、迭代语句(循环语句)、跳转语句和异常处理语句。分支语句可以使用if和else来完成,如下例:if(i==2)...else

...7.2C#基本语法用switch和case来处理多种情况在每一个case中都会使用break作为处理对应情况的代码的结尾,如果没有break,程序将跨越case继续往下执行,直到遇到break或switch语句结束。switch(ch){case'A':...break;case'B':...break;case'C':case'D':... //C和D两种情况都执行这段代码break;default:...break;}7.2C#基本语法迭代语句使用while、for或更方便的foreach来完成。while和for语句和C/C++中的语法相同,如下例:for(inti=0;i<10;i++){...}inti=0;while(i<10){//...i++;}inti=0;do{//...i++;}while(i<10);7.2C#基本语法在C#中使用foreach语句可以更方便地遍历数组或集合类型中的全部元素,如下例所示:

foreach(int

num

in

myArray)

{

Console.Writeline(num);

}7.2C#基本语法C#的跳转语句可以用break、continue以及goto语句来完成。inte=10;for(inti=0;i<e;i++){while(true){break;//跳出while循环,但不跳出for循环

}...}与break不同,continue语句不会退出循环,而是结束本次迭代,进入下一次迭代,如下例:intch;while((ch=Console.Read())!=-1){if(ch=='')continue;//跳过本次迭代的其它语句,进入下次循环再次读取用户输入...}7.2C#基本语法在C语言中如果代码考虑不周,可能会因为“被0除”、“网络不通”等问题使得程序直接退出或“死机”。在面向对象的程序设计语言中通常采用异常处理来解决这类问题。异常处理使用try、catch和finally来完成。其中try块包括了可能抛出异常的代码;catch块捕获异常并进行处理;不管有没有产生异常,finally块中的代码都将被执行。catch块中的ex是异常类Exception或其子类的对象实例。try{

...//可能抛出异常的部分}catch(Exceptionex){...//捕获异常并进行处理}finally{...//try和catch块后总是被执行的部分}7.3C#面向对象程序设计对象:C#充分地支持面向对象的程序设计特性。面向对象中最核心的概念之一就是“对象(Object)”。一个对象就是一个类型的实例(instance),而这个类型可以是值类型,也可以是引用类型,但两种类型在语法上没有区分。在C#中所有的类型(包括装箱后的值类型)都派生自System.Object类,它是所有类的基类。基类Object的成员可以被所有的类直接或间接地继承,这些成员主要包括:Equals函数:支持对象之间进行比较;Finalize函数:在对象被回收之前执行释放内存等操作;GetType函数:获取当前对象实例的类型;ToString函数:返回一个描述对象实例的字符串,通常返回类的名称。7.3C#面向对象程序设计在C#中,类(Class)就是类型,就是对象的模板。类中封装数据成员,也封装了对数据成员的进行操作的成员函数。类的定义如下例:classFoo{//类的成员声明}从C#2.0开始,可以采用partial关键词来将一个类的定义分割在多个文件中,这种方式形成的局部类定义在ASP.NET程序开发时被大量采用。局部类定义如下例://File1.cs第一个文件partialclassFoo{...}//File2.cs第二个文件partialclassFoo{...}7.3C#面向对象程序设计类的数据成员,也叫字段或类变量,是定义在类内用于存储数据,如下例所示:classFoo{doublefoo;}数据成员可以在定义时直接赋初值,如下例所示:classFoo{doublefoo=2.3;}7.3C#面向对象程序设计成员函数在C#中也叫做方法(method)。与C/C++语言相同,函数的作用都是为了封装特定的可重用代码,但与C/C++语言不同,C#中的函数必须是某个类的成员函数,即必须在某个类内定义。如下例所示:classFoo{intBar(inta,intb){returna%b;}}7.3C#面向对象程序设计属性(property)在用法上和数据成员相似,但实际上是成员函数的组合体。一个属性可以包含两个函数,get函数和set函数,分别负责属性的访问和赋值。代码如下:classPerson{stringname;

stringName{get{returnname;}set{name=value;}}}

Personperson=newPerson();person.Name="Robert";//给属性赋值,实际上是调用了set函数7.3C#面向对象程序设计构造函数(constructor)是一种特殊的函数,当对象被创建的时候会调用相应的构造函数。构造函数的名称与类的名称完全相同,它的目的就是要在对象创建时初始化数据成员。一个类可以有多个构造函数,它们之间的区别是函数的参数不同。构造函数的定义如下例所示:classFoo{Foo(){...}}对应于构造函数,析构函数(destructor)的目的是为了在对象回收时完成善后的工作,包括释放内存空间。从基类中继承的缺省的析构函数finalize已经完成了基本的功能,如果没有特别需要善后的工作(比如释放网络资源等),就不必重新定义析构函数。7.3C#面向对象程序设计实例化:在C#语言中初始化一个值类型的变量(也是对象实例)的方式与C语言中没有大的区别。如果要实例化一个引用类型的对象实例,则需要使用关键词new来创建。下例实例化了一个Foo类型的对象实例foo,代码如下:Foofoo=newFoo();其中与类名相同的Foo函数是类的构造函数。实例化之后就可以调用成员函数进行各种操作了,如下所示:intr=foo.Bar(7,2)Console.WriteLine(r);7.3C#面向对象程序设计继承:类可以通过继承进行扩展,子类可以拥有父类的功能,并且可以进行修改或提供更多的功能。面向对象中的继承特性对软件工程中代码重用的需求提供了支持。classA//定义类A{publicvoidSum(inti,intj){intsum=i+j;Console.WriteLine("IamA,mysum={0}",sum);}}classB:A//定义类B,并声明类B继承自类A{publicvoidMinus(inti,intj){intminus=i-j;Console.WriteLine("IamB,myminus={0}",minus);

//类B中虽然没有定义Sum函数,但由于继承的关系,//可以使用类A中定义的Sum函数this.Sum(3,4);}}7.3C#面向对象程序设计classInheritanceTest1{staticvoidMain(string[]args){Bb=newB();

//下面代码输出://IamB,myminus=-1//IamA,mysum=7b.Minus(3,4);

Console.Read();}}7.3C#面向对象程序设计访问修饰符(也叫继承修饰符)设置了类、方法和其它成员的可访问性,使用访问修饰符public、protected、internal或private可以为成员指定可访问性。public成员可以在任何地方进行访问。private成员只能在本类内进行访问,甚至于其子类都不能直接访问。protected成员只能在本类或子类内进行访问。internal其所修饰的类或成员只能在当前程序集(本项目)中进行访问。protectedinternal所修饰的类或成员只能在当前程序集(本项目)或子类中进行访问。7.3C#面向对象程序设计代码声明了两个类:Point和MainClass,由于Point类中的两个数据成员都是public的,因此可以直接从MainClass中访问Point的成员x和y。usingSystem;classPoint{publicintx;publicinty;}

classMainClass{staticvoidMain(){Pointp=newPoint();p.x=10;//直接访问p.xp.y=15;//直接访问p.yConsole.WriteLine("x={0},y={1}",p.x,p.y);//输出:x=10,y=15}}7.3C#面向对象程序设计接口(interface)与类最大的不同是,接口只包含了成员的定义,却没有包含任何的实现。接口可以帮助在多个不同的类上定义相同的函数调用,当然函数的实现是有每个类分别给出的,即接口中只有函数的定义而没有实现。在接口中可以定义方法、属性和索引,这些成员被隐式地声明为public。下面的代码给出了一个接口的定义:interfaceIBinaryOperation{doubleA{get;set;}doubleB{get;set;}doubleGetResult();}其中,A与B为属性,GetResult是方法。7.3C#面向对象程序设计实现了上述的接口。publicclassAdder:IBinaryOperation{publicdoubleA{get;set;}publicdoubleB{get;set;}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论