C#语言程序设计基础

上传人:唐****1 文档编号:242899479 上传时间:2024-09-11 格式:PPT 页数:66 大小:507KB
返回 下载 相关 举报
C#语言程序设计基础_第1页
第1页 / 共66页
C#语言程序设计基础_第2页
第2页 / 共66页
C#语言程序设计基础_第3页
第3页 / 共66页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ASP.NET应用教程,高等学校计算机语言应用教程,中国最大的资料库下载,第,2,章,C#,语言程序设计基础,内容提要,本章主要分析,C#,的语法,,C#,作为,.NET,的原生语言,功能非常强大。,作为,ASP.NET,的编程基础,主要分析,C#,的变量、常量、控制语句、,C#,类的基本使用方法、,C#,的异常处理和,C#,语言面向对象的高级特性。,C#概述,C#,是微软公司专门为,.NET,量身定做的编程语言,它与,.NET,有着密不可分的关系。,C#,的类型就是,.NET,框架所提供的类型,,C#,本身并无类库,而是直接使用,.NET,框架所提供的类库。,另外,类型安全检查、结构化异常处理也都是交给,CLR,处理的。因此,,C#,是最适合开发,.NET,应用的编程语言。,C#的特点,C#,不仅具有,C+,的强大功能,而且具有,Visual Basic,简单易用的特性。,C#,的语法与,C+,基本相同。如果以前对,C+,非常熟悉的话,学习,C#,则是一件非常容易的事情。,默认情况下,,C#,代码在,.NET,框架提供的受控环境下运行,不允许直接操作内存。它带来最大的变化是,C#,没有了,C,和,C+,中的指针。与此相关的,那些在,C+,中被大量使用的指针操作符已经不再出现。,C#,只支持一个“,.”,C#程序结构,案例名称:第一个,C#,程序,程序名称:,2-01.cs,using System;,class Hello,public static void Main() ,Console.WriteLine(,您好,! );,C#编译器,.NET Framework SDK,内置了,C#,编译器“,csc.exe,(,C Sharp Compiler,)”,该文件在“,WINNTMicrosoft.NETFrameworkv,版本号”目录下。,如果不能执行该命令,需要将该目录添加到操作系统的,PATH,变量中。可以在命令窗口编译,C#,文件,假如要编译名为,1-01.cs,的,C#,文件。命令行的语法为:,csc 2-01.cs,不用,using,导入名字空间,案例名称:不用,using,导入名字空间,程序名称:,2-02.cs,class Hello ,public static void Main() ,System.Console.WriteLine(,您好,! );,程序的输入和输出,案例名称:利用,ReadLine(),读入数据,程序名称:,2-03.cs,using System;,class Hello ,public static void Main() ,Console.Write(“,请输入你的名字:”,);,string str_bookName=Console.ReadLine();,Console.WriteLine(,您好,!0 ,str_bookName);,命令行参数,案例名称:使用命令行参数,程序名称:,2-04.cs,using System;,public class Hello,public static void Main(string args) ,Console.WriteLine(,你共有,0,个朋友,args.Length);,Console.WriteLine(,你的朋友列表为:,);,for(int i=0; iargs.Length; i+),Console.WriteLine(Arg0=1, i, argsi);,C#注释,案例名称:使用注释,程序名称:,2-05.cs,using System;,class Hello,static void Main() ,/*,声明一个,DateTime,变量,t,并将当前日期赋给,t */,DateTime t=DateTime.Today;,string str_Time; /,声明一个字符串变量,str_Time,str_Time=t.ToLongDateString();,Console.WriteLine(,当前日期是,:0,str_Time);,C#的数据结构,C#,的数据类型分为值类型(,Value Type,)和引用类型(,Reference Type,)两大类。,值类型包括简单类型(,Simple Type,)、结构类型(,Struct Type,)和枚举类型(,Enum Type,),3,种。引用类型包括类类型(,Class Type,)、数组类型(,Array Type,)和代表类型(,Delegate Type,)。,变量和常量,C#,是大小写敏感的,即大写和小写字母认为是不同的字母。例如变量名,something,,,Something,,,SOMETHING,都是不同的名字。,命名变量名要遵守如下的规则:,不能是,C#,关键字。,第一个字符必须是字母或下划线。,不要太长,一般不超过,31,个字符为宜。,不能以数字开头,中间不能有空格,变量名中不能包含“,.;,”+-”,之类的特殊符号。实际上,变量名中除了能使用,26,个英文大小写字母和数字外,只能使用下划线“,_”,。,变量名不要与,C+,中的库函数名、类名和对象名相同。,使用常量,案例名称:使用常量,程序名称:,2-06.cs,using System;,class Hello,public const double PI=3.14159265;,static void Main(),Console.WriteLine(“,圆周率,PI,的值为,0”,PI);,值类型,值类型,也称为简单类型,是直接由一系列元素构成的数据类型。,C#语言中提供了一组已经定义好了简单类型。,可以分为整整类型、布尔类型、字符类型和实数类型。,整整类型,整整类型的变量的值为整数。计算机的存储单元是有限的,所以计算机语言提供的整数类型的值总是在一定的范围之内。,C#中有九种整数类型,这些整数类型在数学上的表示以及在计算机中的取值范围如表2-1所示。,整整类型,整整类型,特征,取值类型,sbyte,有符号,8,位整数,-128-127,byte,无符号,8,位整数,0-255,short,有符号,16,位整数,-32768-32767,ushort,无符号,16,位整数,0-65535,int,有符号,32,位整数,-214748647,uint,无符号,32,位整数,0-4294967295,long,有符号,64,位整数,-9223372854775807,ulong,无符号,64,位整数,0-184467445,使用整整类型,案例名称:使用整整类型,程序名称:,2-07.cs,using System;,class Hello,public static void Main() ,short x=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,位,用它可以来表示世界上大多数语言。给一个变量赋值的语法为:,char mychar=M;,也可以直接通过十六进制或者,Unicode,赋值。,char mychar=x0034;/mychar=4,char mychar=u0039;/mychar=9,枚举类型,案例名称:使用枚举类型,程序名称:,2-09.cs,using System;,enum WeekDay ,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,;,class Test ,static void Main() ,WeekDay day; /,声明,WeekDay,的实例,day;,day=WeekDay.Sunday;,Console.WriteLine(day,的值是,0,day);,引用类型,C#中的另一大数据类型是引用类型。“引用”的含义是:该类型的变量不直接存储所包含的值,而是存储所要存储值的地址。,C#中的引用类型有四种:类、数组、代表和接口。,类,类是面向对象编程的基本单位,是一种包含数据成员、函数成员的数据结构。类的数据成员有变量、域和事件。函数成员包括方法、属性、构造函数和析构函数等等。类和结构同样都包含了自己的成员,但他们之间最主要在于:类是引用类型,而结构是值类型。,类支持继承机制,通过继承,派生可以扩展类的数据成员和函数方法,进而达到代码重用和设计重用的目的。,数组,案例名称:使用数组类型,程序名称:,2-10.cs,using System;,class test,static void Main() ,int arr1=new int2;,int arr2=new int1,2,3;,string arr3=six, is ,me;,int, arr4=1,2,3,4;,int, arr5=new int3,4;,for(int i=0;iarr1.Length;i+) ,arr1i=i*i*i;,Console.WriteLine(arr10=1,i,arr1i);,for (int i=0;i4;i+) ,for(int j=0;j=。,逻辑操作符,C#提供的逻辑运算符有三个,就是逻辑与(&)、逻辑或(|)和逻辑非(!)。,其中,逻辑与和逻辑或是二元操作符,要求有两个操作数;而逻辑非是一元操作符,只要求一个操作数。,分支语句,分支语句依据一个控制表达式的值,从一系列可能被执行的语句选择出要执行的语句。,包括两种语句:if语句和switch语句。,使用,if,语句,案例名称:使用,if,语句,程序名称:,2-14.cs,using System;,class Hello ,public static void Main() ,Console.Write(,请输入你的名字:,);,string str_userName=Console.ReadLine();,if(str_userName=six),Console.WriteLine(,您好,!0,哎呀,是您啊!,str_userName);,else,Console.WriteLine(0,是哪棵葱?,str_userName);,switch语句,案例名称:使用,switch,语句,程序名称:,2-15.cs,using System;,class Sample,public static void Main() ,int myage=10;,string mystr;,switch (myage) ,case 10: mystr=,还是小孩,!; break;,case 25: mystr=,可以结婚了,!; break;,default: mystr=,不对吧!你到底多大!,; break;,Console.WriteLine(,小子,你,0,mystr);,循环语句,在,C#,中可使用循环语句有,4,种格式:,do-while,: 当(或直到)条件为,True,时循环。,while,: 当条件为,True,时循环。,for,: 指定循环次数,使用计数器重复运行语句。,for each,: 对于集合中的每项或数组中的每个元素,重复执行。,do-while循环,案例名称:,do-while,循环,程序名称:,2-16.cs,using System;,class test,public static void Main() ,int sum=0; /,初始值设置为,0,int i=1; /,加数初始值为,1,do ,sum+=i;,i+;, while (i=100);,Console.WriteLine(,从,0,到,100,的和是,0,sum);,While循环,案例名称:使用,while,语句,程序名称:,2-17.cs,using System;,class Sample,public static void Main() ,int sum=0;,int i=1;,while (i=100) ,sum+=i;,i+;,Console.WriteLine(,从,0,到,100,的和是,0,sum);,For循环,案例名称:使用,for,语句,程序名称:,2-18.cs,using System;,class test,public static void Main() ,int sum = 0;,for(int i= 1;i 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.cs,using System;,class test,public static void Main() ,int sum=0;,int i=1;,while (true) ,sum+=i;,i+;,if (i100) break; /,如果,i,大于,100,则退出循环,Console.WriteLine(,从,0,到,100,的和是,0,sum);,continue语句,案例名称:使用,continue,语句,程序名称:,2-20.cs,using System;,class test,public static void Main() ,for(int n=100;n=200;n+) ,if(n%3=0),continue;,Console.WriteLine(,从,100,到,200,的不能被,3,整除的数是,0,n);,异常处理,C#,的异常可能由两种方式导致:,throw,语句无条件抛出异常。,C#,语句和表达式执行过程中激发了某个异常的条件,使得操作无法正常结束,从而引发异常。例如整数除法操作分母为零时将抛出一个异常。,异常由,try,语句来处理,,try,语句提供了一种机制来捕捉执行过程中发生的异常。,Try,语句有,3,种基本格式:,try-catch,try-finally,try-catch-finally,try-catch结构,案例名称:使用,try-catch,语句,程序名称:,2-21.cs,using System;,class Sample,public static void Main(string args) ,long factorial=1;,long num=Int64.Parse(args0);,try ,checked ,/,计算数,num,的阶乘,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);,try-finally结构,案例名称:使用,try-finally,语句,程序名称:,2-22.cs,using System;,public class Sample ,public static void Main() ,try ,Console.WriteLine(,执行,try,子句,!);,goto leave; /,跳转到,leave,标签,finally ,Console.WriteLine(,执行,finally,子句,!);,leave:,Console.WriteLine(,执行,leave,标签,!);,try-catch-finally结构,案例名称:使用,try-catch-finally,语句,程序名称:,2-23.cs,using System;,class Sample,public static void Main() ,try ,throw(new ArgumentNullException(); /,引发异常,catch(ArgumentNullException e) ,Console.WriteLine(Exception:0,e.Message);,finally ,Console.WriteLine(,执行,finally,子句,);,C#面向对象程序设计基础,与传统的面向过程的编程方法相比,面向对象编程方法有,3,个优点:,(,1,)程序的可维护性好;(,2,)程序容易修改;(,3,)对象可以使用多次,可重用性好。,类的定义,class A,class B,void f() ,A a=new A();,继承,为了提高软件模块的可重用性和可扩充性,以便提高软件的开发效率,希望能够利用前人或自己以前的开发成果,任何面向对象的程序设计语言都能够提供两个重要的特性:,继承性(,inheritance,),多态性(,polymorphism,)。,使用继承,案例名称:使用继承,程序名称:,2-24.cs,using System;,class BaseA,public void FuncA() ,System.Console.WriteLine( Funciton A );,class DerivedA : BaseA,public void FuncB() ,System.Console.WriteLine( Function B );,class Tester,public static void Main( string args ) ,DerivedA aDerived = new DerivedA();,aDerived.FuncA();,aDerived.FuncB();,类的访问修饰符,案例名称:类的访问修饰符,程序名称:,2-25.cs,using System;,class Class1,public string s; /,公有成员,protected int i; /,保护成员,private double d; /,私有成员,public void F1() ,s=Welcome six!; /,正确,允许访问自身成员,i=100; /,正确,允许访问自身成员,d=18.68; /,正确,允许访问自身成员,构造函数和析构函数,构造函数用于执行类的实例的初始化。每个类都有构造函数,即使没有声明它,编译器也会自动提供一个默认的构造函数。在访问一个类的时候,系统将最先执行构造函数中的语句。使用构造函数请注意以下几个问题:,一个类的构造函数通常与类名相同,构造函数不声明返回类型。,构造函数总是,public,类型的。,案例名称:构造函数和析构函数,程序名称:,2-26.cs,using System;,class Desk/,构造函数和类名一样,析构函数前面加,public Desk(),Console.WriteLine(Constructing Desk);,weight=6;,high=3;,width=7;,length=10;,Console.WriteLine(0,1,2,3,weight,high,width,length);,Desk(),Console.WriteLine(Destructing Desk );,protected int weight;,protected int high;,protected int width;,protected int length;,public static void Main(),Desk aa=new Desk();,Console.WriteLine(back in main() );,;,this关键字,案例名称:使用,this,关键字,程序名称:,2-27.cs,using System;,public class Employee ,public string name; /,员工姓名,public decimal salary; /,员工薪水,/,构造函数,public Employee(string name, decimal salary) ,/,用,this,关键字给正在构造的对象的,name,和,salary,赋值,this.name = name;,this.salary = salary;,/,显示员工姓名及薪水,public void DiaplayEmployee() ,Console.WriteLine(,姓名,:0,name);,Console.WriteLine(,薪水,:0,元,salary);,/,用,this,方法将当前对象传给,Tax.CalcTax(),方法,Console.WriteLine(,个人所得税,:0,元,Tax.CalcTax(this);,public class Tax ,public static decimal CalcTax(Employee E) ,return (0.14m*(E.salary-800.0m);,public class Sample,public static void Main() ,/,声明类,Employee,的实例,e,Employee e = new Employee(,小刘,4123.6m);,e.DiaplayEmployee(); /,显示员工姓名和薪水,关键字static,案例名称:使用,static,关键字,程序名称:,2-28.cs,using System;,public class Person ,private int id;,public static int total = 0;,public Person() ,total+;,id = total;,public class OtherClass ,public static void Main() ,Person.total = 100;,Console.WriteLine (Person.total);,Person c = new Person();,Console.WriteLine (Person.total);,案例名称:使用静态方法,程序名称:,2-29.cs,using System;,public class Person ,private int id;,private static int total = 0;,public static int getTotalPerson() ,return total;,public Person() ,total+;,id = total;,public class TestPerson ,public static void Main() ,Console.WriteLine (Person.getTotalPerson();,Person p1 = new Person();,Console.WriteLine (Person.getTotalPerson();,C#面向对象高级特性,和其他的面向对象语言一样,C#支持多态、虚方法、函数的重载等。,除此之外,C#还提供一种特殊的数据形态“装箱”,多态(Polymorphism),在,C#,中,多态性的定义是:“同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果”。,C#,支持两种类型的多态性。,编译时的多态性:编译时的多态是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。,运行时的多态性:运行时的多态性是直到系统运行时,才根据实际情况决定实现何种操作。,C#,中,运行时的多态性通过虚方法实现。,编译时的多态性提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。,虚方法,案例名称:使用虚方法,程序名称:,2-30.cs,using System;,class Test,static void Main(string args),Base b = new Base();,b.Draw();,Derived d = new Derived();,d.Draw();,d.Fill();,Base obj = new Derived();,obj.Fill();,obj.Draw();,class Base,public void Fill(),System.Console.WriteLine(Base.Fill);,public virtual void Draw() ,System.Console.WriteLine(Base.Draw);,class Derived : Base,public override void Draw(),System.Console.WriteLine(Derived.Draw);,public new void Fill(),System.Console.WriteLine(Derived.Fill);,抽象类,案例名称:使用抽象类,程序名称:,2-31.cs,using System;,abstract public class Window,public Window(int top, int left) ,this.top = top;,this.left = left;,abstract public void DrawWindow( );,protected int top;,protected int left;,public class ListBox : Window,public ListBox(,int top,int left,string contents):,base(top, left) /,调用基类的构造函数,listBoxContents = contents;,public override void DrawWindow( ) ,Console.WriteLine (Writing string to the listbox: 0, listBoxContents);,private string listBoxContents;,public class Tester,static void Main( ) ,Window winArray = new Window3;,winArray0 = new ListBox(1,2,First List Box);,winArray1 = new ListBox(3,4,Second List Box);,for (int i = 0;i 2; i+) ,winArrayi.DrawWindow( );,函数重载,案例名称:重载普通函数,程序名称:,2-32.cs,using System;,class Overload,public void Func() ,System.Console.WriteLine( Func() );,public void Func( int x, int y ) ,System.Console.WriteLine( Func( int x, int y ) );,public void Func( long x, long y ) ,System.Console.WriteLine( Func( long x, long y ) );,public static void Main( string args ) ,Overload myOverload = new Overload();,myOverload.Func();,myOverload.Func(1,1);,myOverload.Func(1L, 1L);,/,会调用哪个重载函数呢?,myOverload.Func(1L,1);,案例名称:重载构造函数,程序名称:,2-33.cs,using System;,class CtorOverloadDemo,static void Main(String args) ,MyInt i = new MyInt(2);,System.Console.WriteLine(i.i);,MyInt j = new MyInt();,System.Console.WriteLine(j.i);,class MyInt,public int i;,public MyInt() ,i = 0;,public MyInt( int i ) ,this.i = i;,装箱,案例名称:使用装箱,程序名称:,2-34.cs,using System;,public class UnboxingTest ,public static void Main( ) ,int i = 123;,/,装箱,object o = i;,/,拆箱,必须是显示转换,int j = (int) o;,Console.WriteLine(j: 0, j);,常用的几个函数,字符串输出,把数据转化成字符串以作为输出实际上是很简单的。数值类型转换为字符串可以用,int intAge=25;,string strAge=intAge.ToString();,ToString(),函数可以应用于所有数据类型,.NET Framework,基类库函数。这是因为,ToString(),是,.NET FrameWork,库,System.Object,的基类的函数之一。,函数,功能,Convert.ToBoolean(),转换成为,bool,型,字符串必须为,true,或者,false,Convert.ToChar(),转换成为,char,型,Convert.ToDateTime(),转换成为日期型,Convert.ToDecimal(),转换成为,Decimal,型,Convert.ToInt32(),转换成为,int,型,字符串处理函数,案例名称:使用字符串函数,程序名称:,2-35.cs,using System;,public class UnboxingTest ,public static void Main( ) ,string strDate = 2005-10-1 10:10:55;,string strDay = strDate.Substring(0,strDate.IndexOf( );,Console.WriteLine(,输出日期,: 0, strDay);,小结,本章介绍C#编程基础,掌握C#编译器的使用方法,掌握C#的数据结构,熟悉值类型和引用类型的使用方法。,掌握操作符和控制语句的使用,着重掌握C#的异常处理和C#面向对象编程特性,熟悉C#常用的几个函数。,本章习题,2-1,简述,C#,语言的特点。,2-2,如何读取命令行参数?用程序说明。,2-3,比较基本数据类型和引用数据类型的区别。,2-4 C#,的访问修饰符有几种,各具有什么限定作用?,2-5,构造函数有什么作用?简述重载构造函数的好处。,2-6,析构函数有什么作用?如何定义析构函数?,2-7,如何访问基类的函数?,2-8 C#,中如何实现异常处理?,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 各类标准


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!