资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/6/6,#,01,基本数据类型,02,常量和变量,03,表达式与运算符,04,选择语句,05,循环语句,06,跳转语句,07,数组,1,基本数据类型,基本数据类型,值类型直接存储值,30,age,age,age2,int age=30;,30,30,int age2=age;,age,age2,30,35,age2=35;,值类型,整数类型,int i=10;int j=-10;,uint m=10;uint n=-10;,示,例,类型,说明(,8,位等于,1,字节),范围,sbyte,8,位有符号整数,-128127,short,16,位有符号整数,-3276832767,int,32,位有符号整数,-21474836482147483647,long,64,位有符号整数,-92233720368547758089223372036854775807,byte,8,位无符号整数,0255,ushort,16,位无符号整数,065535,uint,32,位无符号整数,04294967295,ulong,64,位无符号整数,018446744073709551615,类 型,说 明,范 围,float,精确到,7,位数,1.5,10,-,45,3.4,10,38,double,精确到,1516,位数,5.0,10,-,324,1.7,10,308,decimal,精确到,28,位数,1.010,-,28,7.910,28,float theMySum=9.27,f,;float theMuSums=1.12,F,;,double myDou=927,d,;double mudou=112,D,;,decimal money=1.12,m,;,或者,decimal money=1.12,M,;,浮点类型,bool,类型,布尔类型主要用来表示,true/false,值,,C#,中定义布尔类型时,需要使用,bool,关键字。例如,下面代码定义一个布尔类型的变量:,bool x=true;,bool,类型的默认值是,false,。,C#,语言中,使用,char/Char,类定义字符,并且字符只能用单引号括起来,char,ch1 =m,;,Char,ch1 =m,;,M,5,男,bool,5.2,“ch”,检查下面这些是否是合法的字符,字符类型,语法,student1,student1.Name=“m”,Name=“m”,引用类型存储对值的引用,student1,studnet2,Name=“n”,student2.Name=“n”,student2=student1,引用类型,Name=“m”,两个变量都发生变化,student1,studnet2,.NET,中预定义的两种引用类型,类型,说明,object,object,类型在,.NET Framework,中是,Object,的别名。在,C#,的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从,Object,继承的,string,string,类型表示零或更多,Unicode,字符组成的序列,值类型与引用类型的区别,在这里,在哪里,2,常量和变量,定义:,不能被改变,的量,32,368,0 x2F,3.14,3.14F,3.14M,A,“,Hello World”,ture,false,常量,const double PI=3.1415926;,常量的分类,字面常量 符号常量,const,引入,在数学中,我们对变量的概念有一定的了解和认识,如,y=x,2,,其中,,x,、,y,都是变量。,那么,在,C#,中的变量具体是指一个什么概念呢?其实,一个变量就是存储区(,内存,)中的一个存储单元。,变量,变量类型 变量名,=,数值;,变量类型 变量名;,变量名,=,数值;,int,money=1000;,int,money;,money=1000;,变量的声明,变量类型 变量名,1,变量名,2,变量名,n;,int,money1,money2,moneyn;,语法,1,、字母,2,、下划线,_,首字母,任意多的:,1,、数字,2,、字母,3,、下划线,_,其余部分,变,量,名,C#,语言中,变量命名要符合一定规则,money,,,score,,,name,,,sex,变量基本要求:,简短且能清楚地表明变量的作用,通常第一个单词的首字母小写,其后单词的,首字母大写。例如:,myScore,变量的命名规则,变量的初始化,赋值运算符,将右边的数赋值给左边的变量,变量初始化的,3,种方法,单独初始化变量,int sum;,sum=368;,int sum=368;,int a,b,c,d,e;,a=b=c=d=e=0;,声明时初始化变量,同时初始化多个变量,3,表达式与运算符,什么是表达式,引入,表达式是由运算符和操作数组成的。,+,、,-,、*和,/,等都是运算符,操作数包括常量、变量和表达式等。,1 4=4,x*y=z,符号,数,运算符,操作数,按运算符功能,按操作数个数,单目运算符,双目运算符,三目运算符,算术运算符,自增自减运算符,赋值运算符,关系运算符,逻辑运算符,位运算符,条件运算符等,运算符的分类,主要内容,算术运算符,自增自减运算符,赋值运算符,关系运算符,逻辑运算符,位运算符,移位运算符,条件运算符,01,02,03,04,05,06,07,08,运算符的优先级与结合性,09,表达式中的类型转换,09,操作数,操作数,运算符,+,-,*,/,%,算术运算符,基本的算术运算,class Test,public static void Main(String args),double i=-6.5;,int j=-2;,double result=i%j;,Console.WriteLine(result);,使用,%,运算符时的注意事项,使用,%,运算符时,返回结果的符号与左操作数相同,-0.5,b=a+;,相当于:,b=a;,a+;,先取值,后自增,b=-a;,相当于:,-a;,b=a;,先自减,后取值,自增自减运算符,自增自减运算符不能作用于常量或者表达式,=,量,值,做读取操作,可以是常量、表达式,做写的操作,被赋予等号右侧的值,简单赋值运算符,a+=3,a&=3,a=3,a%=b-3,a=a+3,a=a&3,a=a 3,a=a%(b-3),算术赋值,此处千万不能写成:,a=a%b-3,位赋值,移位赋值,复合赋值运算,复合赋值运算符,复合赋值运算符又称为带运算的赋值运算符,它其实是将赋值运算符与其他运算符合并成一个运算符来使用,从而同时实现两种运算符的效果。,大于,等于,=,不等于,!=,大于或等于,=,小于或等于,=,小于,40,?,人到中年了!,:,这正是黄金奋斗的年龄,;,简称,含义,运算符,数目,结合性,单,单目,+,-,!,单目,算,算术,*,/,%,双目,+,-,双目,位,移位,双目,关,关系,=,100),break;,sum+=i;,修改,(,1,),break,语句通常应用在,switch,、,while,、,dowhile,或,for,循环,中,(,2,),break,一般与,if,语句搭配使用,用来,跳出循环,“死循环”,continue,的使用,(,1,),continue,语句通常应用在,while,、,dowhile,或,for,循环,中,(,2,),continue,一般与,if,语句搭配使用,用来,开始一次新的循环,?,2+4+6+8+100=,?,int i,sum=0;,for(i=1;i=100;i+),if(i%2=1),continue;,sum+=i;,break,和,continue,的区别,break,continue,使用,goto,语句实现,1,到,100,的累加。,goto,语句的使用,goto Lable;,Console.WriteLine(“the message before Label”);,Lable:,Console.WriteLine(“the Label message”);,goto,标签,;,语法,改变代码执行顺序,goto,使用说明,goto,语句可以,忽略当前程序的逻辑,直接使程序跳转到某一语句执行,,有时非常方便,但是也正是由于,goto,语句的这种特性,在程序开发中一般不主张使用,goto,语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。,7,数组,主要内容,一维数组,01,多维数组,02,不规则数组,03,数组与,System.Array,04,常用数组操作,05,使用,foreach,语句遍历数组,06,一维数组,引入,一维数组是具有相同数据类型的一组数据的线性集合,在程序中可以通过一维数组来完成一组相同数据类型数据的线性处理,。,type arrayName;,语法,一维数组初始化的,3,种方法,初始化一维数组为默认值,int arr=new int5;,int arr=new int51,2,3,4,5;,string arrStr=Sun,Mon,Tue,Wed,Thu,Fri,Sat;,初始化一维数组为指定值,省略长度初始化数组,多维数组,引入,多维数组是指可以用多个下标访问的数组,声明时,方括号内加逗号,就表明是多维数组,有,n,个逗号,就是,n+1,维数组,。,type,arrayName;,语法,多维数组初始化的,2,种方法,初始化二维数组为默认值,int,arr=new int3,2;,int,arr=new int3,21,2,3,4,5,6;,初始化二维数组为指定值,不规则数组,int a=new int3;,a0=new int5;,a1=new int3;,a2=new int4;,语法,数组与,System.Array,方法,说明,Copy,将数组中的指定元素复制到另一个,Array,中,CopyTo,从指定的目标数组索引处开始,将当前一位数组中的所有元素复制到另一个一位数组中,Exists,判断数组中是否包含指定的元素,GetLength,获取,Array,的指定维中的元素数,GetValue,获取,Array,中指定位置的值,Reverse,反转一维,Array,中元素的顺序,SetValue,设置,Array,中指定位置的元素,Sort,对一维,Array,数组元素进行排序,C#,中的数组是由,System.Array,类派生而来的引用对象,。,数组常用操作,一维数组的输入与输出,使用单层循环实现,使用双层嵌套循环实现,排序算法:冒泡排序等,二维数组的输入与输出,数组的排序,使用,foreach,语句遍历数组,foreach(【,类型】【迭代变量名】,in,【集合表达式】),语句,语法,string strNames=,进货管理,销售管理,库存管理,系统设置,;,foreach(string str in strNames),Console.Write(str+);,示,例,小结,本章对,C#,语言基础知识进行了详细讲解,学习本章时,读者应该重点掌握变量和常量的使用、各种运算符的使用、流程控制语句的使用以及数组的基本操作。本章是,C#,程序开发的基础,因此,我们一定要熟练掌握。,上机指导,通过本章所学尝试制作一个简单的客车售票系统,假设客车的坐位数是,9,行,4,列,使用一个二维数组记录客车售票系统中的所有座位号,并在每个座位号上都显示“【有票】”,然后用户输入一个坐标位置,按回车键,即可将该座位号显示为“【已售】”。,第,3,章 面向对象编程基础,01,面向对象概念,02,类,03,方法,1,面向对象概念,对象、类、实例化,对象,=,(算法,+,数据结构),程序,=,(对象,+,对象,+,),封装,面向对象程序设计语言的三大原则,继承,面向对象程序设计语言的三大原则,多态,面向对象程序设计语言的三大原则,继承中提到了父类和子类,其实将父类对象应用于子类的特征就是多态。依然以图形类来说明多态,每个图形都拥有绘制自己的能力,这个能力可以看作是该类具有的行为,如果将子类的对象统一看作是父类的实例对象,这样当绘制任何图形时,可以简单地调用父类也就是图形类绘制图形的方法即可绘制任何图形,这就是多态最基本的思想。,2,类,主要内容,类的概念,类的声明,类的成员,构造函数和析构函数,对象的创建及使用,this,关键字,类与对象的关系,01,02,03,04,05,06,07,类是一种,数据结构,,它可以包含数据成员(常量和域)、函数成员(方法、属性、事件、索引器、运算符、构造函数和析构函数)和嵌套类型。,类(,class,)实际上是对某种类型的对象定义变量和方法的原型,它表示,对现实生活中一类具有共同特征的事物的抽象,,是面向对象编程的基础。,类的概念,类修饰符,class,类名,类的声明,public,class,Car,public int number;,public string color;,private string brand;,语法,类的成员,字段,常量或者变量,enum,枚举名,list1=value1,list2=value2,list3=value3,listN=valueN,【修饰符】【类型】【属性名】,get get,访问器体,set set,访问器体,枚举,属性,构造函数和析构函数,构造函数,构造函数是在创建给定类型的对象时执行的类方法,构造函数具有与类,相同的名称,它通常初始化新对象的数据成员。,public Program(),z=x+y;,析构函数是以类名加,来命名的。,.NETFramework,类库有垃圾回收功能,,当某个类的实例被认为是不再有效,并符合析构条件时,,.NETFramework,类库的垃圾回收功能就会调用该类的析构函数实现垃圾回收。,Program()/,析构函数,Console.WriteLine(,析构函数自动调用,);,析构函数,对象的创建及使用,对象的创建,Test test=new Test();,Test test=new Test(a);,cStockInfo stockInfo=new cStockInfo();,stockInfo.FullName=,笔记本电脑,;,stockInfo.ShowGoods();,访问对象的属性和行为,对象的引用,Book book;,或:,Book book=new Book();,对象的销毁,this,关键字,C#,语言中可以使用,this,关键字来代表本类对象的引用,,this,关键字被隐式地用于引用对象的成员变量和方法。,private void setName(String name),this.name=name,;,类与对象的关系,类是具有相同或相似结构、操作和约束规则的对象组成的集合,而对象是某一类的具体化实例,每一个类都是具有某些共同特征的对象的抽象。,3,方法,主要内容,方法的声明,方法的参数,静态方法与实例方法,方法的重载,01,02,03,04,方法的声明,修饰符 返回值类型 方法名,(,参数列表,),/,方法的具体实现;,public void ShowGoods(),Console.WriteLine(,库存商品名称:,);,Console.WriteLine(FullName);,语法,方法的参数,值参数,值参数就是在声明时不加修饰的参数,它表明实参与形参之间按值传递。,由于是,值类型的传递方式,所以,在方法中对形参的修改并不会影响实参。,private int Add(int x,int y),x=x+y;,return x;/,返回,x,ref,参数使形参按引用传递,其效果是:在方法中对形参所做的任何更改都将反映,在实参中。如果要使用,ref,参数,则方法声明和方法调用都必须显式使用,ref,关键字。,private int Add(ref int x,int y),x=x+y;,return x;/,返回,x,ref,参数,方法的参数,out,参数,out,关键字用来定义输出参数,它会导致参数通过引用来传递,使用,out,关键字定义,的参数,不用进行赋值即可使用。如果要使用,out,参数,则方法声明和方法调用都必,须显式使用,out,关键字。,private int Add(int x,int y,out int z),z=x+y;,return z;/,返回,z,方法的参数,params,参数,声明方法时,如果有多个相同类型的参数,可以定义为,params,参数。,params,参数是,一个一维数组,主要用来指定在参数数目可变时所采用的方法参数。,private int Add(params int x),int result=0;,for(int i=0;i x.Length;i+),result+=xi;,return result;,静态方法与实例方法,静态方法,静态方法不对特定实例进行操作,在静态方法中引用,this,会导致编译错误,调用,静态方法时,使用类名直接调用。,public,static,int Add(int x,int y),return x+y;,static void Main(string args),Console.WriteLine(0+1=2,23,34,Program.Add(23,34),);,Console.ReadLine();,静态方法与实例方法,实例方法是对类的某个给定的实例进行操作,使用实例方法时,需要使用类的对象,调用,而且可以用,this,来访问该方法。,public int Add(int x,int y),加,return x+y;,static void Main(string args),Program pro=new Program();,Console.WriteLine(0+1=2,23,34,pro.Add(23,34),);,Console.ReadLine();,实例方法,方法的重载,方法重载是指方法名相同,但参数的数据类型、个数或顺序不同的方法。,public static int Add(int x,int y),return x+y;,public double Add(int x,double y),return x+y;,public int Add(int x,int y,int z),return x+y+z;,小结,本章主要对面向对象编程的基础知识进行了详细讲解,具体讲解时,首先介绍了对象、类与实例化这,3,个基本概念,以及面向对象程序设计的,3,大基本原则;然后重点对类和对象,以及方法的使用进行了详细讲解。学习本章内容时,一定要重点掌握类与对象的创建及使用,并熟练掌握常见的几种方法参数类型,以及静态方法与实例方法的主要区别。,上机指导,在进销存管理系统中,商品的库存信息有很多种类,比如商品型号、商品名称、商品库存量等。在面向对象编程中,这些商品的信息可以存储到属性中,然后当需要使用这些信息时,再从对应的属性中读取出来。这里要求定义库存商品结构,并输出库存商品的信息,。,第,4,章 面向对象编程进阶,01,类的继承与多态,02,结构与接口,03,集合与索引器,04,异常处理,05,委托和匿名方法,06,事件,07,预处理指令,08,泛型,1,类的继承与多态,继承,继承的基本思想是基于某个基类的扩展,制定出一个新的派生类,派生类可以继承基类原有的属性和方法,也可以增加原来基类所不具备的属性和方法,或者直接重写基类中的某些方法。,class Test2:Test,base,关键字,base,关键字用于从派生类中访问基类的成员,它主要有两种使用形式,分别如下:,调用基类上已被其他方法重写的方法。,指定创建派生类实例时应调用的基类构造函数。,基类,public Goods(string tradecode,string fullname),TradeCode=tradecode;,FullName=fullname;,派生类,public JHInfo(string jhid,string tradecode,string fullname),:base(tradecode,fullname),JHID=jhid;,继承中的构造函数和析构函数,多态是面向对象编程的基本特征之一,它使得派生类的实例可以直接赋予基类的对象,然后直接就可以通过这个对象调用派生类的方法。,C#,中,类的多态性是通过在派生类中,重写基类的虚方法,来实现的。,多态,基类,public,virtual,void Move(),Console.WriteLine(0,都可以移动,Name);,派生类,public,override,void Move(),Console.WriteLine(0,在铁轨上行驶,Name);,抽象类与抽象方法,如果一个类不与具体的事物相联系,而只是表达一种抽象的概念或行为,仅仅是作为其派生类的一个基类,这样的类就可以声明为抽象类,在抽象类中声明方法时,如果加上,abstract,关键字,则为抽象方法,抽象方法不提供具体的实现。,public,abstract,class TestClass,public,abstract,void AbsMethod();/,抽象方法,密封类与密封方法,为了避免滥用继承,,C#,中提出了密封类的概念。密封类可以用来限制扩展性,如果密封了某个类,则其他类不能从该类继承;如果密封了某个成员,则派生类不能重写该成员的实现。,如果类的方法声明中包含,sealed,修饰符,则称该方法为密封方法。密封方法只能用于对基类的虚方法进行实现,因此,声明密封方法时,,sealed,修饰符总是和,override,修饰符同时使用。,public,sealed,class JHInfo:Information/,密封类,/,将基类的虚方法重写,并设置为密封方法,public,sealed override,void ShowInfo(),Console.WriteLine(,进货信息:,n+Code+Name);,2,结构与接口,结构是一种值类型,通常用来,封装一组相关的变量,,结构中可以包括构造函数、常量、字段、方法、属性、运算符、事件和嵌套类型等。结构实际是将多个相关的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。,C#,中使用,struct,关键字来声明结构。,结构,结构修饰符,struct,结构名,语法,修饰符,interface,接口名称:继承的接口列表,接口内容,;,接口,语法,接口提出了一种契约(或者说规范),让使用接口的程序设计人员必须严格遵守接口提出的约定。接口可以包含方法、属性、索引器和事件作为成员,但是并不能设置这些成员的具体值,也就是说,只能定义。,C#,中声明接口时,使用,interface,关键字。,接口的实现与继承,定义,interface Information,string Code get;set;,void ShowInfo();,public class JHInfo:Information/,继承接口,定义进货类,string code=;,string name=;,public string Code/,实现编号属性,get,return code;,set,code=value;,public void ShowInfo()/,实现方法,输出进货信息,Console.WriteLine(Code+Name);,实现,说明:接口中的成员默认是,公共的,因此,不允许加,访问修饰符。,显式接口成员实现,如果类实现两个接口,并且这两个接口包含具有相同签名的,成员,那么在类中实现该成员将导致两个接口都使用该成员作为,它们的实现,然而,如果两个接口成员实现不同的功能,那么这,可能会导致其中一个接口的实现不正确或两个接口的实现都不正,确,这时可以显式地实现接口成员,即创建一个仅通过该接口调,用并且特定于该接口的类成员。显式接口成员实现是,使用接口名,称和一个句点命名该类成员,来实现的。,抽象类与接口,抽象类和接口的区别主要有以下几点:,它们的派生类只能继承一个基类,即只能直接继承一个抽象类,,但可以继承任意多个接口。,抽象类中可以定义成员的实现,但接口中不可以。,抽象类中可以包含字段、构造函数、析构函数、静态成员或,常量等,接口中不可以。,抽象类中的成员可以是私有的(只要它们不是抽象的)、受保护,的、内部的或受保护的内部成员(受保护的内部成员只能在应用,程序的代码或派生类中访问),但接口中的成员默认是公共的,,定义时不能加修饰符。,3,集合与索引器,集合,语法,集合类似于数组,是一组组合在一起的类型化对象,可以通过遍历获取其中的每个元素。,接口,说明,ICollection,定义所有非泛型集合的大小、枚举数和同步方法,IComparer,公开一种比较两个对象的方法,IDictionary,表示键,/,值对的非通用集合,IDictionaryEnumerator,枚举非泛型字典的元素,IEnumerable,公开枚举数,该枚举数支持在非泛型集合上进行简单迭代,IEnumerator,支持对非泛型集合的简单迭代,IList,表示可按照索引单独访问的对象的非泛型集合,ArrayList,集合,语法,ArrayList,类是一种,非泛型集合类,,它可以动态的添加和删除元素。,ArrayList,类相当于一种高级的动态数组,它是,Array,类的升级版本,但它并不等同于数组。,ArrayList list=new ArrayList();,list.Add(,笔记本电脑,);,list.Add(,华为荣耀,4X);,list.Add(iPad,平板电脑,);,foreach(string name in list),Console.WriteLine(name);,索引器,【修饰符】【类型】,this,【参数列表】,get get,访问器体,set set,访问器体,public string thisint index,get,return arrStrindex;,set,arrStrindex=value;,语法,C#,语言支持一种名为索引器的特殊“属性”,它能够,通过引用数组元素的方式来引用对象,。,4,异常处理,异常处理类,语法,System.Exception,异常处理语句,语法,trycatchfinally,语句,try,被监控的代码,catch(,异常类名,异常变量名,),异常处理,finally,程序代码,throw,语句,throw ExObject,5,委托和匿名方法,委托,语法,C#,中的委托(,Delegate,)是一种引用类型,该引用类型与其它引用类型有所不同,在委托对象的引用中存放的不是对数据的引用,而是存放对方法的引用,即在委托的内部包含一个指向某个方法的指针。通过使用委托把方法的引用封装在委托对象中,然后将委托对象传递给调用引用方法的代码。,【修饰符】,delegate,【返回类型】【委托名称】,(,【参数列表】,),语法,匿名方法,匿名方法允许一个与委托关联的代码被内联地写入使用委托的位置,这使得代码对于委托的实例很直接。除了这种便利之外,匿名方法还共享了对本地语句包含的函数成员的访问。,delegate(,【参数列表】,),【代码块】,语法,6,事件,主要内容,委托的发布和订阅,事件的发布和订阅,EventHandler,类,Windows,事件概述,01,02,03,04,委托的发布和订阅,语法,通过委托实现事件处理的过程,通常需要以下,4,个步骤:,(,1,)定义委托类型,并在发布者类中定义一个该类型的公有成员。,(,2,)在订阅者类中定义委托处理方法。,(,3,)订阅者对象将其事件处理方法链接到发布者对象的委托成员(一个委托类型的引用)上。,(,4,)发布者对象在特定的情况下“激发”委托操作,从而自动调用订阅者对象的委托处理方法。,事件的发布和订阅,语法,C#,提供了专门的事件处理机制,以保证事件订阅的可靠性,其做法是在发布委托的定义中加上,event,关键字,其它代码不变。,public,event,RingEvent OnBellSound;,EventHandler,类,在事件发布和订阅的过程中,定义事件的类型(即委托类型)是一件重复性的工作,为此,,.NET,类库中定义了一个,EventHandler,委托类型,并建议尽量使用该类型作为事件的委托类型。,public delegate void EventHandler(object sender,EventArgs e);,Windows,事件概述,事件在,Windows,这样的图形界面程序中有着极其广泛的应用,事件响应是程序与用户交互的基础。用户的绝大多数操作,如移动鼠标、单击鼠标、改变光标位置、选择菜单命令等,都可以触发相关的控件事件。,public Form1(),InitializeComponent();,button1.Click+=new EventHandler(button1_Click);,private void,button1_Click,(object sender,EventArgs e),this.Close();,7,预处理指令,主要内容,#region,和,#endregion,#defined,和,#undef,#if,、,#elif,、,#else,和,#endif,#warning,和,#error,01,02,03,04,#line,05,在使用,Visual Studio,代码编辑器的大纲显示功能时,指定可展开或折叠的代码块,#region,和,#endregion,#define,和,#undef,定义和取消符号,通常用于为,#if,指令传递条件表达式,,#define,的结果为,true,,,#undef,的结果为,false,#define DEBUG,#undef DEBUG,语法,使用,#define,和,#undef,定义和取消符号时,只能在代码文件的顶部(所有引用命名空间的代码之前)定义,如果在其他区域定义,会出现如图所示的错误提示。,#if,、,#elif,、,#else,和,#endif,主要用来判断符号是否已经定义。结合使用,#if,、,#else,、,#elif,、,#endif,指令,可以根据一个或多个符号是否存在来包含或排除代码,这在编译调试版本的代码或针对特定配置进行代码编译时,非常有用。,#if,块不能与,#region,块重叠,但是,可以将,#region,块嵌套在,#if,块内,或将,#if,块嵌套在,#region,块内。,#if,指令,#elif,指令,#else,指令,#endif,指令,if,语句,else if,语句,else,语句,if,语句的结尾,#warning,生成警告信息,#warning,和,#error,#error,生成错误信息,#line,提示,8,泛型,主要内容,类型参数,T,泛型接口,泛型方法,01,02,03,类型参数,T,泛型的类型参数,T,可以看作是,一个占位符,,它不是一种类型,它仅代表了某种,可能的类型。在定义泛型时,,T,出现的位置可以在使用时用任何类型来代替。类型,参数,T,的命名准则如下:,使用描述性名称命名泛型类型参数,除非单个字母名称完全可以让人了解它表示的含义,而,描述性名称不会有更多的意义。例如,使用代表一定意义的单词作为类型参数,T,的名称,代码,如下:,public interface IStudent,public delegate void ShowInfo,将,T,作为描述性类型参数名的前缀。例如,使用,T,作为类型参数名的前缀,代码如下:,public interface IStudent,T Sex get;,泛型接口,声明泛型接口时,与声明一般接口的唯一区别是增加了一个,。一般来说,声明泛型接口与声明非泛型接口遵循相同的规则。泛型类型声明所实现的接口必须对所有可能的构造类型都保持唯一,否则就无法确定该为某些构造类型调用哪个方法。,interface,【接口名】,【接口体】,语法,泛型方法,泛型方法是,在声明中包括了类型参数,T,的方法,。泛型方法可以在类、结构或接口声明中声明,这些类、结构或接口本身可以是泛型或非泛型。如果在泛型类型声明中声明泛型方法,则方法体可以同时引用该方法的类型参数,T,和包含该方法的声明的类型参数,T,。,【修饰符】,void,【方法名】,【方法体】,语法,小结,本章对面向对象编程的高级知识进行了详细讲解,学习本章内容,重点需要掌握的是类的继承与多态、接口的使用、集合以及泛型的使用,难点是委托和事件的应用,另外,对结构、索引器、异常处理和预处理指令等知识点,熟悉它们的使用方法即可。,上机指导,模拟实现输出进销存管理系统中的每月销售明细,运行程序,输入要查询的月份,如果输入的月份正确,则显示本月商品销售明细;如果输入的月份不存在,则提示“该月没有销售数据或者输入的月份有误!”信息;如果输入的月份不是数字,则显示异常信息。,。,第,5,章,Windows,应用程序开发,01,开发应用程序的步骤,02,Windows,窗体介绍,03,Windows,控件的使用,04,菜单、工具栏与状态栏,05,对话框,06,多文档界面(,MDI,),07,打印与打印预览,1,开发应用程序的步骤,开发应用程序的步骤,使用,C#,开发应用程序时,一般包括创建项目、界面设计、设置属性、编写程序代码、保存项目、程序运行等,6,个步骤。,2,Windows,窗体介绍,主要内容,添加窗体,设置启动窗体,设置窗体属性,窗体常用方法,01,02,03,04,窗体常用事件,05,如果要向项目中添加一个新窗体,可以在项目名称上单击鼠标右键,在弹出的快捷菜单中选择“添加”,/,“,Windows,窗体”或者“添加”,/,“新建项”菜单,打开“添加新项”对话框,选择“,Windows,窗体”选项,输入窗体名称后,单击“添加”按钮,即可向项目中添加一个新的窗体。,添加窗体,public static void Run(Form mainForm),设置启动窗体,语法,向项目中添加了多个窗体以后,如果要调试程序,必须要设置首先运行的窗体,这时就需要设置项目的启动窗体。项目的启动窗体是在,Program.cs,文件中设置的,在,Program.cs,文件中改变,Run,方法,的参数,即可实现设置启动窗体。,Run,方法用于在当前线程上开始运行标准应用程序,并使指定窗体可见。,设置窗体属性,更换窗体的图标,Icon,属性,隐藏窗体的标题栏,FormBorderStyle,属性,控制窗体的显示位置,StartPosition,属性,修改窗体的大小,Size,属性,设置窗体背景图片,BackgroundImage,属性,控制窗体总在最前,TopMost,属性,窗体常用方法,Show,方法,显示窗体,public void Show(),public void Show(IWin32Window owner),Hide,方法,隐藏窗体,public void Hide(),Close,方法,关闭窗体,public void Close(),窗体常用事件,Load,事件,窗体加载,private void Form1_Load(object sender,EventArgs e),FormClosing,事件,窗体关闭时触发,private void Form1_FormClosing(object sender,FormClosingEventArgs e),3,Windows,控件的使用,主要内容,Control,基类,Label,Button,TextBox,01,02,03,04,CheckBox,05,Rad
展开阅读全文