版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章C#语言程序设计基础
2内容提要本章主要分析C#的语法,C#作为.NET的原生语言,功能非常强大。作为ASP.NET的编程基础,主要分析C#的变量、常量、控制语句、C#类的基本使用方法、C#的异常处理和C#语言面向对象的高级特性。C#概述C#是微软公司专门为.NET量身定做的编程语言,它与.NET有着密不可分的关系。C#的类型就是.NET框架所提供的类型,C#本身并无类库,而是直接使用.NET框架所提供的类库。另外,类型安全检查、结构化异常处理也都是交给CLR处理的。因此,C#是最适合开发.NET应用的编程语言。C#的特点C#不仅具有C++的强大功能,而且具有VisualBasic简单易用的特性。C#的语法与C++基本相同。如果以前对C++非常熟悉的话,学习C#则是一件非常容易的事情。默认情况下,C#代码在.NET框架提供的受控环境下运行,不允许直接操作内存。它带来最大的变化是C#没有了C和C++中的指针。与此相关的,那些在C++中被大量使用的指针操作符已经不再出现。C#只支持一个“.”C#程序结构案例名称:第一个C#程序程序名称:2-01.cs
usingSystem;classHello{publicstaticvoidMain(){Console.WriteLine("您好!");}}C#编译器.NETFrameworkSDK内置了C#编译器“csc.exe(CSharpCompiler)”,该文件在“\WINNT\Microsoft.NET\Framework\v版本号”目录下。如果不能执行该命令,需要将该目录添加到操作系统的PATH变量中。可以在命令窗口编译C#文件,假如要编译名为1-01.cs的C#文件。命令行的语法为:csc2-01.cs不用using导入名字空间案例名称:不用using导入名字空间程序名称:2-02.cs
classHello{publicstaticvoidMain(){System.Console.WriteLine("您好!");}}程序的输入和输出案例名称:利用ReadLine()读入数据程序名称:2-03.cs
usingSystem;classHello{publicstaticvoidMain(){Console.Write(“请输入你的名字:”);stringstr_bookName=Console.ReadLine();Console.WriteLine("您好!{0}",str_bookName);}}命令行参数案例名称:使用命令行参数程序名称:2-04.cs
usingSystem;publicclassHello{publicstaticvoidMain(string[]args){Console.WriteLine("你共有{0}个朋友",args.Length);Console.WriteLine("你的朋友列表为:");for(inti=0;i<args.Length;i++){Console.WriteLine("Arg[{0}]=[{1}]",i,args[i]);
}}}C#注释案例名称:使用注释程序名称:2-05.cs
usingSystem;classHello{staticvoidMain(){/*声明一个DateTime变量t并将当前日期赋给t*/DateTimet=DateTime.Today;stringstr_Time;//声明一个字符串变量str_Timestr_Time=t.ToLongDateString();Console.WriteLine("当前日期是:{0}",str_Time);}}C#的数数据结构构C#的数据类类型分为为值类型型(ValueType)和引用用类型((ReferenceType)两大类类。值类型包包括简单单类型((SimpleType)、结构构类型((StructType)和枚举举类型((EnumType)3种。引用类类型包括类类类型(ClassType)、数组类类型(ArrayType)和代表类类型(DelegateType)。变量和常量量C#是大小写敏敏感的,即即大写和小小写字母认认为是不同同的字母。。例如变量量名something,Something,SOMETHING都是不同的的名字。命名变量名名要遵守如如下的规则则:不能是C#关键字。第一个字符符必须是字字母或下划划线。不要太长,,一般不超超过31个字符为宜宜。不能以数字字开头中间不能有有空格变量名中不不能包含““.;,”+-”之类的特殊殊符号。实实际上,变变量名中除除了能使用用26个英文大小小写字母和和数字外,,只能使用用下划线““_”。变量名不要要与C++中的库函数数名、类名名和对象名名相同。使用常量案例名称::使用常量量程序名称::2-06.csusingSystem;classHello{publicconstdoublePI=3.14159265;staticvoidMain(){Console.WriteLine(“圆周率PI的值为{0}”,PI);}}值类型值类型,也也称为简单单类型,是是直接由一一系列元素素构成的数数据类型。。C#语言中中提供了一一组已经定定义好了简简单类型。。可以分为整整整类型、、布尔类型型、字符类类型和实数数类型。整整类型整整类型的的变量的值值为整数。。计算机的的存储单元元是有限的的,所以计计算机语言言提供的整整数类型的的值总是在在一定的范范围之内。。C#中有九九种整数类类型,这些些整数类型型在数学上上的表示以以及在计算算机中的取取值范围如如表2-1所示。整整类型整整类型特征取值类型sbyte有符号8位整数-128-127byte无符号8位整数0-255short有符号16位整数-32768-32767ushort无符号16位整数0-65535int有符号32位整数-2147483648-2147483647uint无符号32位整数0-4294967295long有符号64位整数-9223372036854775808-9223372036854775807ulong无符号64位整数0-18446744073709551615使用整整类类型案例名称::使用整整整类型程序名称::2-07.csusingSystem;classHello{publicstaticvoidMain(){shortx=32766;x++;Console.WriteLine(x);x++;Console.WriteLine(x);}}布尔类型布尔类型是是用来表示示“真”和和“假”的的。布尔类类型表示的的逻辑变量量只有两种种取值。在在C#中,分别采采用true和false两个值来表表示。在C语言中,用用0来表示“假假”,其他他任何非零零的值表示示真。在C#中,布尔型型变量只能能是true或者false。实数类型实数在C#中采用两种种数据类型型来表示::单精度((float)和双精度度(double)。它们的的区别在于于取值范围围和精度不不同。单精度:取取值范围在在正负1.5*10-45到3.4*1038之间,精度度为七位。。双精度:取取值范围在在正负5.0*10-324到1.7*10308之间,精度度为15-16位。字符类型字符包括数数字字符、、英文字母母和表达符符号等等,,C#提供的字符符类型按照照国际标准准,采用Unicode字符集。一一个Unicode的标准字符符长度为16位,用它可可以来表示示世界上大大多数语言言。给一个个变量赋值值的语法为为:charmychar='M';也可以直接接通过十六六进制或者者Unicode赋值。charmychar='\x0034';//mychar='4'charmychar='\u0039';//mychar='9'枚举类型案例名称::使用枚举举类型程序名称::2-09.csusingSystem;enumWeekDay{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};classTest{staticvoidMain(){WeekDayday;//声明WeekDay的实例day;day=WeekDay.Sunday;Console.WriteLine("day的值是{0}",day);}}引用类型C#中的另另一大数据据类型是引引用类型。。“引用””的含义是是:该类型型的变量不不直接存储储所包含的的值,而是是存储所要要存储值的的地址。C#中的引引用类型有有四种:类类、数组、、代表和接接口。类类是面向对对象编程的的基本单位位,是一种种包含数据据成员、函函数成员的的数据结构构。类的数数据成员有有变量、域域和事件。。函数成员员包括方法法、属性、、构造函数数和析构函函数等等。。类和结构构同样都包包含了自己己的成员,,但他们之之间最主要要在于:类类是引用类类型,而结结构是值类类型。类支持继承承机制,通通过继承,,派生可以以扩展类的的数据成员员和函数方方法,进而而达到代码码重用和设设计重用的的目的。数组案例名称::使用数组组类型程序名称::2-10.csusingSystem;classtest{staticvoidMain(){int[]arr1=newint[2];int[]arr2=newint[]{1,2,3};string[]arr3={"six","is","me"};int[,]arr4={{1,2},{3,4}};int[,]arr5=newint[3,4];for(inti=0;i<arr1.Length;i++){arr1[i]=i*i*i;Console.WriteLine("arr1[{0}]={1}",i,arr1[i]);}for(inti=0;i<4;i++){for(intj=0;j<3;j++){arr5[j,i]=i*j;Console.WriteLine("arr5[{0},{1}]={2}",j,i,arr5[j,i]);}}}}代表程序名称::使用代表表程序名称::2-11.csusingSystem;delegateintmydelegate();classmyclass{publicintInstMethod(){Console.WriteLine("CalltheInstMethod.");return0;}}classTest{staticpublicvoidMain(){myclassp=newmyclass();mydelegated=newmydelegate(p.InstMethod);d();//指代p.InstMethod}}接口接口描述了组组件对外提供供的服务。在在组件和组件件之间、组件件和客户之间间都通过接口口进行交互。。因此组件一旦旦发布,它只只能通过预先先定义的接口口来处理合理理的、一致的的服务。操作符与控制制语句表达式由操作作数和操作符符来构造。表表达式的操作作符指示出对对操作数采取取哪种操作。。操作符的例例子包括+、-、*、/和new。操作数的例例子包括文字字、域、局部部变量和表达达式。有三种类型的的操作符:一元操作符。。一元操作符符有一个操作作数并且或是是使用前缀符符号(例如--x)或是使用后后缀符号(例例如x++)。二元操作符。。二元操作符符有两个操作作数并且使用用中间符号((例如x+y)。三元操作符。。只有一个三三元操作符??:。三元操操作符有三个个操作数并且且使用中间符符号(c?x:y)。算术操作符案例名称:使使用算术操作作符程序名称:2-13.csusingSystem;enumWeekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};classtest{staticvoidMain(){stringmystr1="你好!";stringmystr2="小刘";stringmystr3=mystr1+mystr2;Weekdayd1=Weekday.Sunday;Weekdayd2=d1+3;Console.WriteLine("d1={0},d2={1}",d1,d2);Console.WriteLine(mystr3);}}赋值操作符赋值就是给一一个变量传一一个新的值。。在C#中,,赋值分为简简单赋值和复复合赋值两大大类。操作符“=””是简单赋值值操作符号。。复合赋值操操作符号包括括+=、-=、*=、/=、%=、、|=、^/、<<=、、>>=。逻辑操作符C#提供的逻逻辑运算符有有三个,就是是逻辑与(&&)、逻辑辑或(||))和逻辑非((!)。其中,逻辑与与和逻辑或是是二元操作符符,要求有两两个操作数;;而逻辑非是是一元操作符符,只要求一一个操作数。。分支语句分支语句依据据一个控制表表达式的值,,从一系列可可能被执行的的语句选择出出要执行的语语句。包括两种语句句:if语句句和switch语句。。使用if语句案例名称:使使用if语句程序名称:2-14.csusingSystem;classHello{publicstaticvoidMain(){Console.Write("请输入你的名名字:");stringstr_userName=Console.ReadLine();if(str_userName=="six"){Console.WriteLine("您好!{0},哎呀,是您啊啊!",str_userName);}else{Console.WriteLine("{0}是哪棵葱?",str_userName);}}}switch语句案例名称:使使用switch语句程序名称:2-15.csusingSystem;classSample{publicstaticvoidMain(){intmyage=10;stringmystr;switch(myage){case10:mystr="还是小孩!";break;case25:mystr="可以结婚了!";break;default:mystr="不对吧!你到到底多大!";break;}Console.WriteLine("小子,你{0}",mystr);}}循环语句在C#中可使用循环环语句有4种格式:do--while:当(或直直到)条件为为True时循环。while:当条件为为True时循环。for:指定循环环次数,使用用计数器重复复运行语句。。foreach:对于集合合中的每项或或数组中的每每个元素,重重复执行。do-while循环案例名称:do-while循环程序名名称::2-16.csusingSystem;classtest{publicstaticvoidMain(){intsum=0;//初始值值设置置为0inti=1;//加数初初始值值为1do{sum+=i;i++;}while(i<=100);Console.WriteLine("从0到100的和是是{0}",sum);}}While循环环案例名名称::使用用while语句程序名名称::2-17.csusingSystem;classSample{publicstaticvoidMain(){intsum=0;inti=1;while(i<=100){sum+=i;i++;}Console.WriteLine("从0到100的和和是是{0}",sum);}}For循循环环案例例名名称称::使使用用for语句句程序序名名称称::2-18.csusingSystem;classtest{publicstaticvoidMain(){intsum=0;for(inti=1;i<=100;i++){sum+=i;}Console.WriteLine("从0到100的和和是是{0}\n",sum);sum=0;intj=1;for(;;){if(j>100)break;sum+=j;j++;}Console.WriteLine("从0到100的和和是是{0}",sum);}}跳转转语语句句跳转转语语句句进进行行无无条条件件跳跳转转。。常用用的的跳跳转转语语句句::break语语句句和和continue语语句句。。break语语句句break语句句跳跳出出包包含含它它的的switch,while,do,for,或或for-each语句句。。假假如如break不是是在在switch,while,do,for或者者for-each语句句的的块块中中,,将将会会发发生生编编译译错错误误。。案例例名名称称::使使用用break语句句程序序名名称称::2-19.csusingSystem;classtest{publicstaticvoidMain(){intsum=0;inti=1;while(true){sum+=i;i++;if(i>100)break;//如果果i大于于100,则退出循循环}Console.WriteLine("从0到100的和是{0}",sum);}}continue语句句案例名称称:使用用continue语句程序名称称:2-20.csusingSystem;classtest{publicstaticvoidMain(){for(intn=100;n<=200;n++){if(n%3==0)continue;Console.WriteLine("从100到200的不能被被3整除的数数是{0}",n);}}}异常处理理C#的异常可可能由两两种方式式导致::throw语句无条条件抛出出异常。。C#语句和和表达达式执执行过过程中中激发发了某某个异异常的的条件件,使使得操操作无无法正正常结结束,,从而而引发发异常常。例例如整整数除除法操操作分分母为为零时时将抛抛出一一个异异常。。异常由由try语句来来处理理,try语句提提供了了一种种机制制来捕捕捉执执行过过程中中发生生的异异常。。Try语句有有3种基本本格式式:try-catchtry-finallytry-catch-finallytry-catch结构构案例名名称::使用用try-catch语句程序名名称::2-21.csusingSystem;classSample{publicstaticvoidMain(string[]args){longfactorial=1;longnum=Int64.Parse(args[0]);try{checked{//计算数数num的阶乘乘for(longcur=1;cur<=num;cur++)factorial*=cur;}}catch(OverflowExceptionoe){Console.WriteLine("计算{0}的阶乘乘时引引发溢溢出异异常",num);Console.WriteLine("{0}",oe.Message);return;}Console.WriteLine("{0}的阶乘乘是{1}",num,factorial);}}try-finally结构构案例名名称::使用用try-finally语句程序名名称::2-22.csusingSystem;publicclassSample{publicstaticvoidMain(){try{Console.WriteLine("执行try子句!");gotoleave;//跳转到到leave标签}finally{Console.WriteLine("执行finally子句!");}leave:Console.WriteLine("执行leave标签!");}}try-catch-finally结构案例名称::使用try-catch-finally语句程序名称::2-23.csusingSystem;classSample{publicstaticvoidMain(){try{throw(newArgumentNullException());//引发异常}catch(ArgumentNullExceptione){Console.WriteLine("Exception:{0}",e.Message);}finally{Console.WriteLine("执行finally子句");}}}C#面向对对象程序设设计基础与传统的面面向过程的的编程方法法相比,面面向对象编编程方法有有3个优点:(1)程序的可可维护性好好;(2)程序容易易修改;((3)对象可以以使用多次次,可重用用性好。类的定义classA{}classB{voidf(){Aa=newA();}}继承为了提高软软件模块的的可重用性性和可扩充充性,以便便提高软件件的开发效效率,希望望能够利用用前人或自自己以前的的开发成果果,任何面面向对象的的程序设计计语言都能能够提供两两个重要的的特性:继承性(inheritance)多态性(polymorphism)。使用继承案例名称::使用继承承程序名称::2-24.csusingSystem;classBaseA{publicvoidFuncA(){System.Console.WriteLine("FuncitonA");}}classDerivedA:BaseA{publicvoidFuncB(){System.Console.WriteLine("FunctionB");}}classTester{publicstaticvoidMain(string[]args){DerivedAaDerived=newDerivedA();aDerived.FuncA();aDerived.FuncB();}}类的访问修修饰符案例名称::类的访问问修饰符程序名称::2-25.csusingSystem;classClass1{publicstrings;//公有成员protectedinti;//保护成员privatedoubled;//私有成员publicvoidF1(){s="Welcomesix!";//正确,允许许访问自身身成员i=100;//正确,允许许访问自身身成员d=18.68;//正确,允许许访问自身身成员}构造函数和和析构函数数构造函数用用于执行类类的实例的的初始化。。每个类都都有构造函函数,即使使没有声明明它,编译译器也会自自动提供一一个默认的的构造函数数。在访问问一个类的的时候,系系统将最先先执行构造造函数中的的语句。使使用构造函函数请注意意以下几个个问题:一个类的构构造函数通通常与类名名相同构造函数不不声明返回回类型。构造函数总总是public类型的。案例名称::构造函数数和析构函函数程序名称::2-26.csusingSystem;classDesk{//构造造函函数数和和类类名名一一样样,,析析构构函函数数前前面面加加~publicDesk(){Console.WriteLine("ConstructingDesk");weight=6;high=3;width=7;length=10;Console.WriteLine("{0},{1},{2},{3}",weight,high,width,length);}~Desk(){Console.WriteLine("DestructingDesk");}protectedintweight;protectedinthigh;protectedintwidth;protectedintlength;publicstaticvoidMain(){Deskaa=newDesk();Console.WriteLine("backinmain()");}};this关关键键字字案例例名名称称::使使用用this关键键字字程序序名名称称::2-27.csusingSystem;publicclassEmployee{publicstringname;//员工工姓姓名名publicdecimalsalary;//员工工薪薪水水//构造造函函数数publicEmployee(stringname,decimalsalary){//用this关键键字字给给正正在在构构造造的的对对象象的的name和salary赋值值=name;this.salary=salary;}//显示示员员工工姓姓名名及及薪薪水水publicvoidDiaplayEmployee(){Console.WriteLine("姓名名:{0}",name);Console.WriteLine("薪水水:{0}元",salary);//用this方法法将将当当前前对对象象传传给给Tax.CalcTax()方法法Console.WriteLine("个人人所所得得税税:{0}元",Tax.CalcTax(this));}}publicclassTax{publicstaticdecimalCalcTax(EmployeeE){return(0.14m*(E.salary-800.0m));}}publicclassSample{publicstaticvoidMain(){//声明明类类Employee的实实例例eEmployeee=newEmployee("小刘刘",4123.6m);e.DiaplayEmployee();//显示示员员工工姓姓名名和和薪薪水水}}关键字字static案例名名称::使用用static关键字字程序名名称::2-28.csusingSystem;publicclassPerson{privateintid;publicstaticinttotal=0;publicPerson(){total++;id=total;}}publicclassOtherClass{publicstaticvoidMain(){Person.total=100;Console.WriteLine(Person.total);Personc=newPerson();Console.WriteLine(Person.total);}}案例名名称::使用用静态态方法法程序名名称::2-29.csusingSystem;publicclassPerson{privateintid;privatestaticinttotal=0;publicstaticintgetTotalPerson(){returntotal;}publicPerson(){total++;id=total;}}publicclassTestPerson{publicstaticvoidMain(){Console.WriteLine(Person.getTotalPerson());Personp1=newPerson();Console.WriteLine(Person.getTotalPerson());}}C#面面向对对象高高级特特性和其他他的面面向对对象语语言一一样,,C#支持持多态态、虚虚方法法、函函数的的重载载等。。除此之之外,,C#还提提供一一种特特殊的的数据据形态态“装装箱””多态(Polymorphism)在C#中,多多态性性的定定义是是:““同一一操作作作用用于不不同的的类的的实例例,不不同的的类将将进行行不同同的解解释,,最后后产生生不同同的执执行结结果””。C#支持两两种类类型的的多态态性。。编译时时的多多态性性:编编译时时的多多态是是通过过重载载来实实现的的。对对于非非虚的的成员员来说说,系系统在在编译译时,,根据据传递递的参参数、、返回回的类类型等等信息息决定定实现现何种种操作作。运行时时的多多态性性:运运行时时的多多态性性是直直到系系统运运行时时,才才根据据实际际情况况决定定实现现何种种操作作。C#中,运运行时时的多多态性性通过过虚方方法实实现。。编译时时的多多态性性提供供了运运行速速度快快的特特点,,而运运行时时的多多态性性则带带来了了高度度灵活活和抽抽象的的特点点。虚方法法案例名名称::使用用虚方方法程序名名称::2-30.csusingSystem;classTest{staticvoidMain(string[]args){Baseb=newBase();b.Draw();Derivedd=newDerived();d.Draw();d.Fill();Baseobj=newDerived();obj.Fill();obj.Draw();}}classBase{publicvoidFill(){System.Console.WriteLine("Base.Fill");}publicvirtualvoidDraw(){System.Console.WriteLine("Base.Draw");}}classDerived:Base{publicoverridevoidDraw(){System.Console.WriteLine("Derived.Draw");}publicnewvoidFill(){System.Console.WriteLine("Derived.Fill");}}抽象类类案例名名称::使用用抽象象类程序名名称::2-31.csusingSystem;abstractpublicclassWindow{publicWindow(inttop,intleft){this.top=top;this.left=left;}abstractpublicvoidDrawWindow();protectedinttop;protectedintleft;}publicclassListBox:Window{publicListBox(inttop,intleft,stringcontents):base(top,left){//调用基类的的构造函数数listBoxContents=contents;}publicoverridevoidDrawWindow(){Console.WriteLine("Writingstringtothelistbox:{0}",listBoxContents);}privatestringlistBoxContents;}publicclassTester{staticvoidMain(){Window[]winArray=newWindow[3];winArray[0]=newListBox(1,2,"FirstListBox");winArray[1]=newListBox(3,4,"SecondListBox");for(inti=0;i<2;i++){winArray[i].DrawWindow();}}}函数重载案例名称::重载普通通函数程序名称::2-32.csusingSystem;classOverload{publicvoidFunc(){System.Console.WriteLine("Func()");}publicvoidFunc(intx,inty){System.Console.WriteLine("Func(intx,inty)");}publicvoidFunc(longx,longy){System.Console.WriteLine("Func(longx,longy)");}publicstaticvoidMain(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《证券销户宝典》课件
- 单位管理制度集粹选集【职工管理篇】十篇
- 2024服务合同范文(32篇)
- 3ds Max动画制作实战训练(第3版)教学教案
- 2024年医院个人工作总结范文
- 探索“两引四体验”戏曲教学模式传承中华文化基因
- 部编版道德与法治六年级上册第三单元第7课《权力受到制约和监督》教学设计
- 物联网认证技术发展趋势-洞察分析
- 虚拟现实时尚产品市场调研-洞察分析
- 体育课程资源整合创新-洞察分析
- 产品代发合同范例
- 《城市轨道交通票务管理》-实训计划
- 2024广东省基本医疗保险门诊特定病种业务经办规程-申请表
- 2023年辅导员职业技能大赛试题及答案
- 讲师与教育平台合作合同
- 2025届江苏省丹阳市丹阳高级中学高一数学第一学期期末统考试题含解析
- 汽车保险与理赔课件 3.4认识新能源汽车车上人员责任保险
- GB/T 33629-2024风能发电系统雷电防护
- 建筑工程施工现场安全检查手册
- 小学英语语法练习模拟试卷
- 高标准农田建设项目安全文明施工方案
评论
0/150
提交评论