程序设计基础_第1页
程序设计基础_第2页
程序设计基础_第3页
程序设计基础_第4页
程序设计基础_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

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

文档简介

C#程序设计基础主要内容C#语言特点数据类型变量与常量运算符与表达式流程控制语句程序的结构异常处理C#的特点语法简洁彻底的面向对象设计安全机制功能强,代码工作量小数据类型值类型:该类型的数据长度固定,存放于栈内;引用类型:该类型的数据长度可变,存放于堆内所有数据类型都是一个类,具有格式化、类型转换等功能。

值类型

(整形)数据类型简单值类型整数类型7inti1=-10;uinti2=10;longl1=-1000;ulongl2=1000;shorts1=-300;ushorts2=300;sbyteb1=-5;sbyteb2=0;值类型(字符型)③ 字符型字符包括数字字符、英文字母、表达符号等,C#提供的字符按照国际公认的标准,采用Unicode字符集。一个Unicode的标准字符长度为16位。C#中也存在转义字符,用来在程序中指代特殊的控制字符。C#中使用的转义字符如表A.2所示。简单值类型整数类型字符类型

数据类型9charch1='a';charch2='\\';charch1='abc';charch2="\\";值类型(实型)② 实型实型数据分为浮点型和十进制类型。数学中的小数在C#中采用两种数据类型来表示:单精度(float)和双精度(double)。它们的取值范围和精度如下。单精度:取值范围为±1.5×10-45~±3.4×1038,精度为7位数。双精度:取值范围为±5.0×10-324~±1.7×10308,精度为15到16位数。十进制类型(decimal)是C#专门提供的一种类型,主要用于金融和货币方面的计算。该类型是一种高精度、128位数据类型,运算结果准确到小数点后28位。当定义一个decimal变量并赋值给它时,使用m下标以表明它是一个十进制类型,例如,decimaldx=1.0m;。doublex=1.2;floaty=0.5F;decimalz=3.2M;简单值类型整数类型字符类型

实数类型布尔类型

数据类型11boolb1=true;boolb2=false;值类型(结构类型)结构类型是指把各种不同类型数据信息组合在一起形成的类型。结构类型的变量采用struct来声明,例如,可以定义学生成绩表记录结构如下:structStudent{publicstringnumber;publicstringname;publicintscore;}Studentstu1;stu1就是一个Student结构类型的变量。对结构成员的访问通过结构变量名加上访问符“.”号,再跟成员名,如="Jacky";。结构类型包含的成员类型没有限制,结构类型的成员还可以是结构类型。与类的区别:占用栈空间,效率高;自动释放内存;容易复制。值类型(枚举类型)枚举实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号。例如,声明一个代表颜色的枚举类型的变量:enumColor{red,yellow,blue,green,black,white};Colorcol;枚举类型的变量在某一时刻只能取枚举中某一个元素的值例如,col这个表示颜色的枚举类型变量,在某一时刻只能为枚举中的一种颜色(0-红色2-黄色…….

ColoryourCol; yourCol=Color.red;等价于yourCol=0;枚举中的每一个元素类型都是int型,第一个元素的值为0,其后每一个连续的元素依次加1递增。也可以给元素直接赋值,如把red的值设为1,其后的元素的值分别为2,3,…。enumColor{red=1,yellow,blue,green,black,white};为枚举元素所赋的值的类型限于long、int、short和byte等整数类型。引用类型C#中的另一大数据类型为引用类型,引用类型与值类型的区别在于:引用类型变量不直接存储所包含的值,存储引用地址C#中的引用类型有4种:类、数组、委托和接口。1.类 类是面向对象编程的基本单位。“类”是一种构造,通过使用该构造,您可以将其他类型的变量、方法和事件组合在一起,从而创建自己的自定义类型。类的数据成员有常量、字段和事件。类支持继承机制如果类没有声明为静态类,客户端代码就可以创建赋给变量的“对象”或“实例”,如果类声明为

静态类,则内存中只存在一个副本,并且客户端代码只能通过该类自身而不是“实例变量”访问该类类的定义类是C#中功能最强大的数据类型,在C#中使用关键词

class

来定义类。声明类 publicclassAnimal { //类主体,用以定义数据和行为 }创建对象:使用关键词new

来创建对象。 Animalanimal=newAminal();Aminal()是类的默认构造函数,将在后面介绍。newAminal()创建了对象,并将引用地址返回给Animal类型的变量animal。animal并不包含实例的数据,只是一个引用(地址),因为类是引用类型。数据类型类的声明与实例化17classComplexNumber{publicdoublea;publicdoubleb;}ComplexNumberc1=newComplexNumber();c1.a=2.5;c1.b=5;数据类型类:引用类型18classComplexNumber{publicdoublea;publicdoubleb;}ComplexNumberc1=newComplexNumber();c1.a=2.5;c1.b=5;c1a:2.5b:5数据类型类:引用类型19classComplexNumber{publicdoublea;publicdoubleb;}ComplexNumberc1=newComplexNumber();c1.a=2.5;c1.b=5;ComplexNumberc2=c1;c1a:2.5b:5c2数据类型类:引用类型20classComplexNumber{publicdoublea;publicdoubleb;}ComplexNumberc1=newComplexNumber();c1.a=2.5;c1.b=5;ComplexNumberc2=c1;c2.b=10;c1a:2.5b:10c2数据类型类:引用类型结构:值类型21structComplexNumber{publicdoublea;publicdoubleb;}ComplexNumberc1=newComplexNumber();c1.a=2.5;c1.b=5;c1a:2.5b:5数据类型类:引用类型结构:值类型22structComplexNumber{publicdoublea;publicdoubleb;}ComplexNumberc1=newComplexNumber();c1.a=2.5;c1.b=5;ComplexNumberc2=c1;c1a:2.5b:5c2a:2.5b:5数据类型类:引用类型结构:值类型23structComplexNumber{publicdoublea;publicdoubleb;}ComplexNumberc1=newComplexNumber();c1.a=2.5;c1.b=5;ComplexNumberc2=c1;c2.b=10;c1a:2.5b:5c2a:2.5b:10Msdn示例 struct类型适于表示Point、Rectangle和Color等轻量对象。尽管使用自动实现的属性将一个点表示为类同样方便,但在某些情况下使用结构更加有效。例如,如果声明一个1000个Point对象组成的数组,为了引用每个对象,则需分配更多内存;这种情况下,使用结构可以节约资源publicstructCoOrds{ publicintx,y; publicCoOrds(intp1,intp2){ x=p1; y=p2; }}//Declareandinitializestructobjects.classTestCoOrds{ staticvoidMain() { //Initialize: CoOrdscoords1=newCoOrds(); CoOrdscoords2=newCoOrds(10,10); //Displayresults: Console.Write("CoOrds1:"); Console.WriteLine("x={0},y={1}",coords1.x,coords1.y); Console.Write("CoOrds2:"); Console.WriteLine("x={0},y={1}",coords2.x,coords2.y); //Keeptheconsolewindowopenindebugmode. Console.WriteLine("Pressanykeytoexit."); Console.ReadKey(); }}/* Output:CoOrds1:x=0,y=0 CoOrds2:x=10,y=10 */成员概述成员访问限制private私有27classStudent{privatestringname;privatevoidWrite(){Console.WriteLine(name);}}Students1=newStudent();Console.WriteLine();s1.Write();成员概述成员访问限制private私有public公有28classStudent{publicstringname;publicvoidWrite(){Console.WriteLine(name);}}Students1=newStudent();Console.WriteLine();s1.Write();成员概述成员访问限制private私有public公有protected保护29classStudent{protectedstringname;protectedvoidWrite(){Console.WriteLine(name);}}classGraduate:Student{publicvoidOutput(){Console.WriteLine(name);Write();}}成员概述成员访问限制private私有public公有protected保护internal内部

30namespaceAsm1{internalclassStudent{}}namespaceAsm2{classLibrary{publicvoidGet(){Asm1.Students1=newAsm1.Student();}}}成员概述成员访问限制private私有public公有protected保护internal内部

31namespaceAsm1{publicclassStudent{}}namespaceAsm2{classLibrary{publicvoidGet(){Asm1.Students1=newAsm1.Student();}}}成员概述静态成员与非静态成员实例成员(非静态)

32classStudent{publicstringname;}Students1=newStudent();Console.WriteLine();成员概述静态成员与非静态成员实例成员(非静态)

静态成员

33classStudent{publicstringname;publicstaticstringschool;}Students1=newStudent();Console.WriteLine();Console.WriteLine(Student.school);成员概述静态成员与非静态成员实例成员(非静态)

静态成员

34classStudent{publicstringname;publicstaticstringschool;publicstaticvoidWrite(){Console.WriteLine(name);}}成员概述字段一般字段

35publicclassCircle{publicdoubler;}Circlec1=newCircle();Console.WriteLine(c1.r);c1.r=10;成员概述字段一般字段常量字段

36publicclassCircle{publicdoubler;publicconstdoublePI=3.14;}Circlec1=newCircle();Console.WriteLine(c1.r);c1.r=10;Console.WriteLine(Circle.PI);Circle.PI=3.1416;成员概述字段一般字段常量字段只读字段

37publicclassCircle{publicdoubler;publicreadonlydoublePI=3.14;}Circlec1=newCircle();Console.WriteLine(c1.r);c1.r=10;Console.WriteLine(c1.PI);c1.PI=3.1416;方法38方法声明

publicintMax(intx,inty){returnx>=y?x:y;}返回类型方法名参数列表执行体方法参数类型值传递39publicvoidSx,inty){intz=x;x=y;y=z;}inta=10;intb=20;Swap(a,b);a:10b:20x:10y:20方法参数类型值传递40publicvoidSx,inty){intz=x;x=y;y=z;}inta=10;intb=20;Swap(a,b);a:10b:20x:20y:10方法参数类型值传递引用传递41publicvoidSintx,refinty){intz=x;x=y;y=z;}inta=10;intb=20;Swap(a,b);a:10b:20xy方法参数类型值传递引用传递42publicvoidSintx,refinty){intz=x;x=y;y=z;}inta=10;intb=20;Swap(a,b);a:20b:10xy方法参数类型值传递引用传递输出型参数43publicintSumProd(intx,inty,outinta){a=x*y;returnx+y;}方法参数类型值传递引用传递输出型参数数组型参数44publicintSum(paramsint[]x){ints=0;for(inti=0;i<x.Length;i++)s+=x[i];returns;}int[]x={1,3,5,7,9};ints1=Sum(x);ints2=Sum(2,4,6,8,10);类的特殊方法构造函数

45publicclassStudent{publicintage=18;}Students1=newStudent();s1.age=20;类的特殊方法构造函数无参构造函数

46publicclassStudent{publicintage;publicStudent(){age=18;}}Students1=newStudent();s1.age=20;类的特殊方法构造函数无参构造函数带参构造函数

47publicclassStudent{publicintage;publicStudent(inti){age=i;}}Students1=newStudent(20);类的特殊方法构造函数无参构造函数带参构造函数静态构造函数

48publicclassStudent{publicintage;publicstaticstringschool;staticStudent(){school="华中理工大学";}}类的特殊方法构造函数无参构造函数带参构造函数静态构造函数析构函数

49publicclassStudent{publicstringname;~Student(){Console.Write(“学生对象{0}销毁”,name);}}this对象引用this.

50publicclassComplexNumber{privatedoublea;privatedoubleb;publicComplexNumber(doublea,doubleb){this.a=a;this.b=b;}publicvoidOutput(){Console.Write("{0}+{1}i",this.a,this.b=b);}}常用类型ObjectToString()GetType()

51objecto1=newobject();console.WriteLine(o1.GetType());o1="abc";Console.WriteLine(o1.GeType());System.ObjectSystem.String常用类型ObjectToString()GetType()Equals()

52objecto1=newobject();Students1=newStudent();console.Write(o1==s1);o1=s1;Console.Write(o1==s1);falsetrue常用类型String创建对象

53strings1="VisualC#";strings2=newstring('M',3);char[]v={'V','i','s','u','a','l'};strings3=newstring(v);strings4=newstring(v,0,3);常用类型String创建对象字符操作

54strings1="Apple";inti=s1.IndexOf('p');i=s1.LastIndexOf('p');s1=s1.ToUpper();s1=s2.Replace('P','A');1"APPLE"2"AAALE"常用类型String创建对象字符操作子串操作

55strings1="Software";inti=s1.IndexOf('ware');strings2=s1.SubString(0,4);strings3=s2.Insert(0,"Micro");s1=s2.Replace('soft','sun');4"soft""Microsoft""MicroSun"常用类型String创建对象字符操作子串操作格式化和解析

56strings1=string.Format("{0}年级{0}班",3);intx=8;s1=string.Format("{0}年{1}月",08,x);s1=string.Format("{0:C3}元",9999);常用类型DateTimeYear,Month,Day,Hour,Minute,SecondNow,TodayAddYears(),AddDays(),AddHours()...ToString(),Parse(),TryParse()

572.数组 数组是同一类型数据的有序集合。数组的声明格式如下:

数组类型[]数组名;classClass1{ staticvoidMain() { string[]a1=newint[]{1,2,3};//一维数组 string[,]a2=newint[,]{{1,2,3},{4,5,6}};//二维数组 string[,,]a3=newint[10,20,30];//三维数组 }}还有重要的一个概念集合类将在后面讲解//Single-dimensionalarrays(一维).int[]myArray1=newint[5];string[]myArray2=newstring[6];//Multidimensionalarrays(多维).int[,]myArray3=newint[4,2];

int[,,]myArray4=newint[4,2,3];

//Jaggedarray(arrayofarrays

交错)int[][]myArray5=newint[3][];3.委托面向对象应用程序中,对象与对象之间通过消息和事件建立联系。当一个对象发生了某种事件时,会发出一定的消息去引发其他对象的方法来响应该事件。如何在事件源与接收方之间建立联系呢?.NET框架提供了一种特殊的类型“委托(Delegate)”,在事件源与事件接收者之间架起了一座桥梁委托的作用与结构化程序中函数指针的作用相似,但具有面向对象、类型安全等新的特征。讲完面向对象概念后安排一个例子进行讲解4.接口实现c#程序中的多重继承机制 接口的声明要用到interface关键字讲完面向对象概念后安排一个例子与设计模式一起进行讲解装箱与拆箱

装箱和拆箱机制使得在C#类型系统中,值类型的变量与引用型变量之间可以互相转换。装箱(Boxing)是指把数值类型的变量转换成引用类型的操作。把一个值类型装箱,就是创建一个object类型的实例并把该值类型数据复制给这个object实例。装箱操作举例如下:inti=2000;objectobj=i;装箱操作转换可以隐式转换;将引用类型转换为数值类型的操作称为“拆箱(UnBoxing)”,该操作必须显式地完成。拆箱操作举例如下:objectobj1; intj=(int)obj1;常量与变量常量即在程序的运行过程中其值不会发生改变的量。常量的声明,就是声明程序中要用到的常量的类型、名称和它的值。常量声明的格式为:常量修饰符const类型标识符常量名=常量表达式;

privateconstintmax;其中常量修饰符可以是

new、private、protected、internal、public常量定义举例如下: publicconstintx=1,y=3;变量是在程序的运行过程中其值可以发生改变的量。从用户的角度来看,变量就是存储信息的基本单元;从系统的角度来看,变量就是计算机内存中的一个存储空间。变量必须先定义后使用。变量定义的一般形式为:[变量修饰符]类型标识符变量标识符[=常量表达式];变量修饰符有new、private、protected、internal、public、static和readonly。变量定义举例如下:staticpublicintx=1;运算符与表达式表达式由运算数和运算符组成,表达式中的运算符指出了对操作数的操作。A.2.1算术运算符与算术表达式算术运算符用来执行常规的算术运算包括+(加)、-(减)、*(乘)、/(除)%(模,求余数)。

赋值运算符与赋值表达式赋值运算符主要用来进行赋值操作,包括=+=、-=、*=、/=、%=、|=、^=、>>=和<<=赋值运算符将左操作数与右边表达式进行相应的运算,然后把结果赋给左操作数。例如:

x+=6等价于x=x+6。关系运算符与关系表达式关系运算符主要进行表达式的比较操作包括==(等于)!=(不等于)>(大于)<(小于)>=(大于等于)<=(小于等于)这些运算符都是二元运算符,运算结果为布尔值true或false

逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式位运算符位运算符用来对数据按二进制位进行运算,包括&(与)|(或)^(异或)~(取反)<<(左移)>>(右移)其中取反是一元运算符,其他操作符都是二元运算符位运算的操作数为整型数或者是可以转换为整型的任何其他类型。对象创建运算符即new

运算符,用来创建对象并调用对象的构造函数进行初始化。例如,Class1obj=newClass1();该语句用于创建类Class1的对象obj,并调用Class1的构造函数Class1()对该对象进行初始化。其他运算符++递增运算符:对操作数进行加法运算,例如,语句i++;等价于语句i=i+1;--递减运算符:对操作数进行减法运算,例如,语句i--;等价于语句i=i-1;条件运算符:即“?:”,是一个三元运算符。使用的一般形式为:

(表达式1)?(表达式2):(表达式3),

。例如:intmax=(x>y)?x:y;如果x>y为true,则把x赋给max,否则,把y赋给max流程控制语句C#提供了以下流程控制语句。(1)分支控制语句:if语句和switch语句。(2)循环控制语句:while语句、do-while

语句、for语句和foreach语句。(3)跳转语句:break和continue。(4)异常处理语句:try、catch和finally。分支控制语句当程序中需要进行两个或两个以上的选择时,可以根据条件判断来选择将要执行的一组语句。C#提供的选择语句有if语句和switch语句。if语句if语句是最常用的选择语句,用来判断是否满足给定的条件,根据判定的结果决定执行给出的两种操作之一。例如,对一个浮点数x求绝对值,结果保存在x中

if(x<0)x=-x;例如,将两个整型数x,y中较大的赋给整数max

if(x>y)max=x;elsemax=y;如果程序的逻辑判断关系比较复杂,通常还可以采用条件判断嵌套语句。此时每一条else与离它最近且没有其他else与之对应的if相搭配。循环控制语句循环语句用于实现一个程序模块的重复执行。C#提供了4种循环控制语句。while语句do-while语句for语句foreach语句1.while语句while语句用来实现“当型”循环结构。其一般形式如下:

while(布尔表达式)语句它的执行顺序为:① 计算布尔表达式的值;② 当布尔表达式为真时,执行while语句中的内嵌语句,然后程序转至第1步;③ 当布尔表达式为假时,结束循环。例如用while语句求1+2+3+…+100,代码如下:i=1;sum=0;while(i<=100){ sum+=i;i++;}Console.WriteLine("1+2…+100=",sum.toString());循环控制语句2.do-while语句do-while语句的特点是先执行循环体,然后判断循环条件是否成立。例如用do-while语句求1+2+3+…+100,代码如下i=1;sum=0;do{sum+=i;i++;}while(i<=100);Console.WriteLine("1+2+3+…+100="+sum.toString());循环控制语句3.for语句在事先知道循环次数的情况下,使用for语句比较方便。For语句的格式为:

for(表达式1;表达式2;表达式3)语句其中表达式表达式1为循环控制变量初始化表达式2为循环控制条件表达式3为调整循环变量 3个表达式都可选的,缺省某个表达式时,其后的分号“;”不能省,如三个表达式都缺省的情况如下:for(;;){语句}例如用for语句计算1+2+3+…+100,代码如下:

for(i=1;i<=100;i++)sum+=i; 循环控制语句4.foreach语句foreach语句是C#中新引入的,它表示收集一个集合中的各元素,并针对各元素执行内嵌语句。foreach一般形式为:

foreach(类型标识符标识符in表达式)语句例如int[]arr=newint[]{1,2,3,4,5};foreach(intainarr) Console.WriteLine(a);异常处理语句C#中提供的异常处理语句有:trycatchfinallytry语句提供了一种机制来捕捉块执行过程中发生的异常。它的一般形式为try{被保护的语句块 }catch(异常声明1){语句1}Catch() {语句2}Finally{必须执行的语句}控制结构跳转break82while(true){x*=2;if(x>=100)break;}控制结构跳转breakcontinue83while(true){x*=2;if(x<100)continue;}控制结构跳转breakcontinuereturn84while(true){x*=2;if(x>1000)return;}程序结构命名空间:提供组织相关的类的逻辑层次结构,一个类可以放到一个命名空间里;C#规定,必须有一个类包含一个静态的Main()方法,返回值必须是int或void;单步执行:使用快捷键F11或菜单命令“调试”---“逐语句”设置断点:将光标放到想要暂停的地方使用快捷键F9或Ctrl+B.NETFramework:.NETFramework具有两个主要组件:公共语言运行库:您可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。

.NETFramework类库。它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面(GUI)应用程序,也包括基于ASP.NET所提供的最新创新的应用程序(如Web窗体和XMLWebservices)。类库.NETFramework类库由命名空间组成。每个命名空间都包含可在程序中使用的类型:类、结构、枚举、委托和接口。当您在VisualStudio中创建VisualC#项目时,已经引用了最常用的基类DLL(程序集)。但是,如果您需要使用尚未引用的DLL中的类型,则需向此DLL添加引用。.基本编程命名空间包括System.Collections—它包含的接口和类定义各种对象(如列表、队列、数组、哈希表和字典)集合。System.Collections.Generic--包含定义泛型集合的接口和类;泛型集合允许用户创建强类型的集合,这种集合在类型安全和性能上均优于非泛型强类型集合。System.IO—它包含的类型用于支持数据流和文件的同步和异步读写。System.Text—它包含表示ASCII、Unicode、UTF-7和UTF-8字符编码的类;用于来回转换字符块和字节块的抽象基类;以及在不创建String中间实例的情况下操作和格式化String对象的帮助器类。System.Threading—提供启用多线程编程的类和接口。此命名空间包括一个管理线程组的ThreadPool类,一个启用在指定时间后要调用的委托的Timer类,以及一个同步互斥线程的Mutex类。System.Threading还为线程调度和等待通知提供了相应的类。.数据和XML命名空间包括:System.Data—由构成ADO.NET结构的类组成,该结构是托管应用程序的主要数据访问方法。ADO.NET结构使您可以生成可用于有效管理来自多个数据源的数据的组件

温馨提示

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

评论

0/150

提交评论