版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C#基础2023年1月4日第1页本章内容数据类型运算符控制语句字符串处理类和对象委托与事件2023年1月4日第2页
数据类型2023年1月4日第3页值类型C#中的值类型数据,存储在内存的堆栈中时,每个变量或程序都有自己的堆栈,不能共用一个堆栈地址。当数据从一个值类型的变量传递到另一个相同类型的变量时,会在堆栈中分配两个不同的地址。简单类型是数值类型的一种,是组成应用程序的基本组成部件,简单类型又包括:整数类型,浮点类型,布尔类型,字符类型等,枚举(enum)类型是由一组特定的常量构成一种数据结构,系统把相同类型、表达固定含义的一组数据作为一个集合放到一起形成新的数据类型。结构类型通常是一组相关的信息组合成的单一实体。其中的每个信息称为它的一个成员。结构类型可以用来声明构造函数、常数、字段、方法、属性、索引、操作符和嵌套类型。结构类型通常用于表示较为简单或者较少的数据,其实际应用意义在于使用结构类型可以节省使用类的内存的占用,因为结构类型没有如同类对象所需的大量额外的引用。2023年1月4日第4页
2023年1月4日第5页表值类型及其描述类别描述简单类型整数类型有符号整数sbyte-128~127short-32768~32767int-2147483648~2147483647long-9223372036854775808~9223372036854775807无符号整数byte0~255ushort0~65535uint0~4294967295ulong0~18446744073709551615实数类型float1.5*10-45~3.4*1038double5.0*10-324~1.7*10308高精度小数decimal1.0*10-28~7.9*1028布尔型bool字符型char0~65535枚举类型用户自定义类型enum结构类型用户自定义类型struct引用数据类型1/6C#中的引用类型数据,存储在内存的堆栈中时,不同的变量共同使用同一个位置的数据,当数据从一个引用类型的变量传递到另一个相同类型的变量时,只是把这个变量的引用地址传递给新的变量,同时引用当前堆栈的数据。object类是所有其它类型的基类,C#中的所有类型都直接或间接地从object类中继承。因此,对一个object的变量可以赋予任何类型的值.字符串实际上是Unicode字符的连续集合,通常用于表示文本,在C#中提供了对字符串(string)类型的强大支持,可以对字符串进行各种的操作。数组(Array)是一种数据结构,它包含了通过计算索引访问的变量成员。包含于数组中的变量成为数组元素。所有的数组元素都具有相同的数据类型,而这个类型被称为数组类型。2023年1月4日第6页引用数据类型2/62023年1月4日第7页表3-3引用类型及其描述类别描
述引用类型类类型objectstringclass委托类型delegate数组类型一维或多维数组,例如int[],int[,]接口类型interface引用数据类型3/61.object类型
object类是所有其它类型的基类。C#中的所有类型都直接或间接地从object类中继承。因此,对一个object的变量可以赋予任何类型的值,例如:intx=25;objectobj1;obj1=x;objectobj2='A';2023年1月4日第8页引用数据类型4/62.字符串类型 字符串实际上是Unicode字符的连续集合,通常用于表示文本。C#提供了对字符串(string)的强大支持,可以对字符串进行各种操作。字符串值是用双引号引住。下面是几个字符串操作的例子。stringmyString1=”hello,world!”;//把字符串赋值给字符串变量myString1stringmyString2=”hello,”+”world!”;boolequal=(myString1==myString2);//equal的值为truecharmyChar=myString1[6];//myChar的值为w2023年1月4日第9页引用数据类型5/6数组(array)是一种数据结构,它包含了通过计算索引访问的变量成员。包含在数组中的变量称为数组元素。所有的数组元素都具有相同的数据类型,这个类型被称为数组类型。数组的声明格式如下:数据类型[]数组名;例如:int[]myArray;myArray[0]=0;数组初始化有两种方式:第一种是在声明的同时对数组进行初始化;例如:int[]myArray={1,2,3,4,5};相当于:myArray[0]=1;myArray[1]=2;myArray[2]=3;myArray[3]=4;myArray[4]=5;第二种方法初始化,使用new申请一块内存空间,然后直接初始化数组的所有元素。例如:int[]myArray=newint[5]{1,2,3,4,5};2023年1月4日第10页引用数据类型6/6C#支持多维数组,声明与一维数组相似。多维数组有多个下标,例如二维数组和三维数组的声明格式如下:数据类型[,]数组名;数据类型[,,]数组名;例如:int[,]myArray2=newint[,]{{1,2,3},{4,5,6}};C#支持不规则的数组,相当于数组的数组。不规则数组允许针对各维创建元素个数不等的多维数组。下面是对一个不规则数组的声明:int[][]myArray3={newint[5],newint[1],newint[3]};在声明一个不规则数组的同时对其进行初始化,例如:int[][]myArray3=newint[][]{newint[]{1,3,5,7,9},newint[]{2},newint[]{4,6,8},}; 2023年1月4日第11页语句C#代码由一系列语句组成,每条语句都以分号表示结束,物理上的一行可以容纳多条语句,但为了达到可读性要求,不建议在—行上放置多条语句了。但一条语句放在多个行上比较常见。
C#是一个块结构的语言,所有的语句都是代码块的一部分。这些块用一对花括号(“{}”)来界定,一个语句块可以包含任意多条语句,或者根本不包含语句。花括号字符本身不加分号且最好独占一行,花括号字符必须成对出现,“}”自动与自身以前的且最临近的“{”进行匹配。代码块可以互相嵌套(即块中可以包含其他块),而被嵌套的块要缩进得多一些。2023年1月4日第12页1:usingSystem;2://TheFirstC#Program3:namespacehelloworld4:{5:classprogram6:{7:staticvoidMain(String[]args)8:{9:Console.WriteLine(“hello,world”);10:Console.Read();11:}12:}13:}
标识符与关键字标识符(identifier)是C#程序员为类型、方法、变量、常量等所定义的名字。关键字(Keyword)是C#程序语言保留作为专用的字,不能作为通常的标识符来使用。标识符命名规则:以字母、下划线(_)等Unicode字符开头,但是不能以数字开头,不能包含空格,关键字不可以用作普通标识符,但可以用@前缀来避免这种冲突。关键字也称为保留字(reservedword),在C#语言中有如下关键字:2023年1月4日第13页变量与常量所谓常量,就是在程序的运行过程中其值不能被改变的量。常量的类型也可以是任何一种C#的数据类型。常量的定义格式如下:const常量数据类型常量名(标识符)=常量值;所谓变量,就是在程序的运行过程中其值可以被改变的量,变量的类型可以是任何一种C#的数据类型。所有值类型的变量具有实际存在于内存中的值,也就是说当将一个值赋给变量是执行的是值拷贝操作。变量的定义格式和常量的有些类似,只是没有了const关键字,其定义格式如下:变量数据类型变量名(标识符);
或者变量数据类型变量名(标识符)=变量值;2023年1月4日第14页
装箱与拆箱装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type)。把一个值类型的值装箱,就是创建一个object实例并将这个值复制给这个object,装箱后的object对象中的数据位于堆中,堆中的地址在栈中。被装箱的类型的值是作为一个拷贝赋给对象的。拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口的值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。2023年1月4日第15页类型转换程序中经常会遇到需要将某个类变量的值转换为另外一个类型。如需要显示某个整型变量,则需要将其转换为字符串。类型转换分为以下几种情况。根据转换方式的不同,可以分为隐式(Implicit)转换和显式(Explicit)转换。根据源类型和目标类型之间的关系进行划分,又可分为变换(Conversion)、投射(Cast)和装箱/拆箱(Boxing/Unboxing)。隐式转换隐式转换,通常将低类型向高类型转换。如将int型变量转换为float型变量。这类转换可以保证转换前后的值不发生变化。一般情况下,系统可以自动实现隐式转换。下表列出了可以实现隐式转换的类型。显式转换两种类型之间没有任何关系的数据类型,是不能相互转换的。下表列出了可以进行显式转换数值类型。显式转换显式转换需要明确制定需要转换的类型。转换前后可能有误差,所以有的地方又叫强制转换。下表列出了有关Convert的一些类型转换方法说明。算术运算符算术运算符主要用于数学计算中,主要有加法运算符(+),减法运算符(–),乘法运算符(*),除法运算符(/),求模运算符(%),自加运算符(++)和自减运算符(--)。2023年1月4日第20页
赋值运算符赋值运算符用于将一个数据赋予一个变量、属性或者引用,数据可以是常量,也可以是表达式。2023年1月4日第21页
关系运算符关系运算符表示了对操作数的比较运算,有关系运算符组成的表达式就是关系表达式。关系表达式的结果只可能有两种即“true”或“false”。2023年1月4日第22页逻辑运算符逻辑运算符主要用于逻辑判断,主要包括逻辑与,逻辑或和逻辑非。其中,逻辑与和逻辑或属于二元运算符,“逻辑非”运算符是一元运算符。2023年1月4日第23页
条件运算符C#中唯一的一个三元操作符就是条件运算符(?:),由条件运算符组成的表达式就是条件表达式,条件表达式的一般格式为:其中,“操作数1”的值必须为逻辑值,否则将出现编译错误。进行条件运算时,首先判断问号前面的“操作数1”的逻辑值是真还是假,如果逻辑值为真,则条件运算表达式的值等于“操作数2”的执行结果值;如果为假,则条件运算表达式的值等于“操作数3”的执行结果值。2023年1月4日第24页
操作数1?操作数2:操作数3
对象创建运算符在C#中,new运算符用于创建对象和调用构造函数,new运算符还用于调用值类型的默认构造函数。它有三种形式:创建对象,用于创建一个类类型或值类型的实例。创建数组,用于创建一个数组类型实例。创建委托,用于创建一个新的委托类型实例。下面代码分别创建了一个对象、一个数组和一个委托。classA{};Aa=newA;int[]int_arr=newint[10];delegatedoubleDFunc(intx);DFuncf=newDFunc(5);2023年1月4日第25页
运算符的优先级在C#中为运算符定义了不同的优先级,相同优先级的运算符按照从左至右的顺序执行。括号是优先级最高的,可以任意的改变符号的计算顺序。2023年1月4日第26页表C#运算符的优先级类别运算符结合性初级运算符().[]x++x--一元运算符+–!~++x--x乘/除运算符*/%左结合加/减运算符+–左结合移位运算符<<>>左结合关系运算符<><=>=isas左结合关系运算符==!=左结合按位与运算符&左结合按位或运算符^左结合按位OR运算符|左结合逻辑与运算符&&左结合逻辑或运算符||左结合条件运算符?:右结合赋值运算符=+=–=*=/=%=&=|=^=<<=>>=右结合运算符的优先级2023年1月4日第27页
控制语句分支语句循环控制语句跳转语句异常处理语句2023年1月4日第28页分支语句1/2分支是控制下一步要执行哪些代码的过程,C#中分支语句主要有if语句和switch语句,三元运算符(?:)也有分支的功能。if语句是最常用的分支语句,使用该语句可以有条件地执行其他语句。if语句的最基本使用格式如下:2023年1月4日第29页
if(表达式)
语句块1;[else语句块2;]分支语句2/2switch语句非常类似于if语句,它也是根据测试的值来有条件地执行代码,实际上switch语句完全可以使用if语句代替。一般情况下,如果只有简单的几个分支就需要使用if语句,否则建议使用switch语句,这样可以使代码的执行效率比较高。switch语句的基本语法定义如下:2023年1月4日第30页switch(控制表达式){case常量表达式1:语句块1;break;case常量表达式2:语句块2;break;……case常量表达式n:语句块n;break;default:语句块n;}循环语句当需要反复执行某些相似的语句时,就可以使用循环语句了,这对于大量的重复操作时尤其有意义。C#中的循环语句有四种:while循环do-while循环for循环foreach循环
2023年1月4日第31页循环语句while语句while语句有条件地将内嵌语句执行0次或若干次。while语句的格式为:while(表达式)语句块;它的执行顺序是:(1)计算表达式的值,它必须是布尔型的。(2)当表达式的值为true时,执行语句块一次,程序转至第(1)步;(3)当表达式的值为false时,while循环结束;2023年1月4日第32页循环语句do-while语句do-while语句与while语句不同的是,它将内嵌语句执行一次(至少一次)或若干次。语句的格式为:do语句块while(表达式)它的执行顺序是:(1)执行语句块一次;(2)计算表达式的值,若为true则回到第(1)步,为false则终止do循环。
2023年1月4日第33页循环语句for语句for语句是C#中使用频率最高的循环语句。在事先知道循环次数的情况下,使用for语句比较方便。for语句的格式为:for(循环变量赋初值;循环条件;循环变量增值)
语句;
其中循环变量赋初值、循环条件、循环变量增值三项都是可选项。for语句执行次序如下:(1)按书写顺序将循环变量赋初值(如果有的话)执行一次,为循环控制变量赋初值;(2)测试循环条件(如果有的话)中的条件是否满足;(3)若没有循环条件项或条件满足,则执行语句一次,按循环变量增值改变循环控制变量的值,回到第(2)步执行;(4)若条件不满足,则for循环终止。2023年1月4日第34页循环语句foreach语句foreach语句是C#中新引入的。C和C++中没有这个语句,但VisualBasic的程序员应该对它不会陌生。它表示收集一个集合中的各个元素,并针对各个元素执行内嵌语句。语句的格式为:foreach(数据类型循环变量int表达式)
语句;其中数据类型用来声明循环变量类型的,表达式对应集合。每执行一次语句,循环变量就依次取集合中的一个元素代入其中。在这里,循环变量是一个只读型局部变量。foreach语句中的表达式必须是集合类型,如果该集合的元素类型与循环变量类型不一致,则必须有一个显示定义的从集合中的元素类型到循环变量元素类型的显式转换。2023年1月4日第35页跳转语句1/2跳转语句实现了在程序中的无条件跳转,C#提供了break语句:终止并跳出循环continue语句:终止当前的循环,重新开始一个新的循环。goto语句:跳转到指定的语句位置return语句:跳出循环及包含它的函数throw语句:抛出一个异常。在switch语句中使用break语句退出某个case语句。break也可以用于退出for、foreach、while或do...while循环,该语句会使控制流执行循环后面的语句。如果该语句放在嵌套的循环中,就执行最内部循环后面的语句。如果break放在switch语句或循环外部,就会产生编译错误。2023年1月4日第36页跳转语句2/2continue语句类似于break,也必须在for、foreach、while或do...while循环中使用。但它只退出当前的循环,开始执行下一次循环,而不是退出循环。goto语句可以直接跳转到程序中用标签(一个标识符,后跟一个冒号)指定的另一行。goto语句的限制是不能跳转到像for循环这样的代码块中,不能跳出类的范围,也不能退出try...catch块后面的finally块。return语句用于退出类的方法,把控制权返回方法的调用者,如果方法有返回类型,return语句必须返回这个类型的值,如果方法没有返回类型,应使用没有表达式的return语句。throw语句用于抛出一个异常。2023年1月4日第37页异常处理语句1/3什么是异常:异常是程序执行时遇到的任何错误情况或意外行为。比如:代码或调用的代码(如共享库)中有错误,操作系统资源不可用,公共语言运行库遇到意外情况(如无法验证代码)如何处理异常:应用程序可以从其中一些异常中恢复,有些则不能恢复。在.NETFramework中,异常从Exception类继承。异常从发生问题的代码区域引发,然后沿堆栈向上传递,直到应用程序处理它或程序终止。C#中的异常处理语句:try...catchtry…catch…finallytry…finallythrow2023年1月4日第38页
异常处理语句2/3使用try-catch捕获异常:捕获并处理异常的好处是不用把那些令人讨厌的异常信息提示给用户,而是使产生了异常的应用程序继续执行。try包含可能会产生异常的语句,而catch语句处理一个异常。Throw通常用在异常处理语句中,当抛出异常时,程序在catch语句中搜索对该异常的处理代码。当抛出异常时,控制被传递给处理该异常的try语句中的第一个catch语句。使用try和finally清除异常:它不仅抑制了错误信息,而且所有包含在finally块中的代码在异常被引发后仍然会被执行。使用try-catch-finally处理所有异常:合并了前面两种错误处理技术-捕获错误、清除并继续执行应用程序。2023年1月4日第39页异常处理语句3/3throw语句用于发出在程序执行期间出现异常的信号。throw语句通常与try-catch或try-finally语句一起使用。声明一个异常,格式如下:
classExceptionName:Exception{}引发自己的异常,格式如下:
throw(ExceptionName);2023年1月4日第40页字符串处理字符串是Unicode字符的有序集合,用于表示文本。String对象是System.Char对象的有序集合,用于表示字符串。String对象的值是该有序集合的内容,并且该值是不可变的。
String对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。看来似乎修改了String对象的方法实际上是返回一个包含修改内容的新String对象。如果需要修改字符串对象的实际内容,请使用System.Text.StringBuilder类。
StringBuilder类表示值为可变字符序列的类似字符串的对象。之所以说值是可变的,是因为在通过追加、移除、替换或插入字符而创建它后可以对它进行修改。大多数修改此类的实例的方法都返回对同一实例的引用。由于返回的是对实例的引用,因此可以调用该引用的方法或属性。
StringBuilder的容量是实例在任何给定时间可存储的最大字符数,并且大于或等于实例值的字符串表示形式的长度。容量可通过Capacity属性或EnsureCapacity方法来增加或减少,但它不能小于Length属性的值。如果在初始化StringBuilder的实例时没有指定容量或最大容量,则使用特定于实现的默认值(默认为16个字符)。2023年1月4日第41页使用String和StringBuilderSystem.String是一个类,专门用于存储字符串,允许对字符串进行多种操作。由于这种数据类型非常重要,C#提供了关键字和相关的语法,以便于使用这个类来处理字符串。这个类可以完成许多常见的任务,例如替换字符、删除空白和把字母变成大写形式等。StringBuilder不像String那样支持非常多的方法。在StringBuilder上可以进行的处理仅限于替换和添加或删除字符串中的文本。但是,它的工作方式非常高效。2023年1月4日第42页格式化字符串String类的Format方法提供了一种方便的格式化字符串的方式,使用.NETFramework的复合格式设置功能将对象的值转换为其文本表示形式,并将该表示形式嵌入字符串中。参数可以是任何类型,包括经定义的和用户定义的。Format方法处理一个格式规范(format-specification)字符和许多可变的参数,格式规范字符定义字符串模板,并引入每个参数的格式规范。格式规范字符串语法如下:它指定了一个强制索引、格式化文本的可选长度和对齐方式,以及格式说明符字符的可选字符串,其中格式说明符字符用于控制如何设置相应对象的值的格式。2023年1月4日第43页{ParamIndex[,MinWidth][:FormatString]}类和对象面向对象的程序设计(Object-OrientedProgramming,OOP)是一种基于结构分析的、以数据为中心的程序设计方法。其主要思想是将数据及处理这些数据的操作都封装(Encapsulation)到一个被称为类(Class)的数据结构中,使用这个类时,只需定义一个类的变量,这个变量被称为对象(Object)。C#是一种面向对象的程序设计语言,拥有面向对象语言的三大特点:封装性、继承性和多态性。2023年1月4日第44页类通常把具有相同的性质和功能的事物所构成的集合体——类。例如:汽车、电脑、人、花、鸟、树等都可以看做是类。类是对象概念在面向对象编程语言中的反映,在计算机语言中,类是一种数据结构,是一种特定的数据组织形式。它包含数据成员,类似于某种属性函数成员,类似于某种功能例如:人类:数据成员——身高、体重函数成员——走路、思考、说话等声明类声明类也是定义类,就像定义变量一样,因为类与变量一样,他也是一种数据类型,只不过这种数据类型是用户自己定义的。在C#语言中,定义一个类使用class关键字。类的属性集类的修饰符关键字class类名继承方式基类{
类的成员}ClassCar//定义汽车类{publicintwheels;//公有成员,车轮子个数protectedfloatweight;//受保护的,表示重量PublicCar(intw,floatg)//构造函数{wheels=w;//成员变量,车轮weight=g;//成员变量,重量}对象对象就是类抽象出来的具体实例,例如人类的实例就是世界上的每一个人。对象是面向对象应用程序的一个组成部件,这个组成部件封装了部分应用程序,这部分程序可以是一个过程,一些数据或一些更抽象的实体。对象包含成员变量和成员方法等,变量组成了对象中的数据,而对象包含的方法可以访问对象中的变量。在C#语言中国,对象是类的实例化,这表示创建类的一个真正实例了,这个实例是按照类的模板创建的,“类的实例”和对象表示相同的含义,但需要注意的是,“类”和“对象”是完全不同的概念。在现实世界中,任何类的对象都具有一定的属性和功能,也总能用数据结构与算法将它们的属性和功能合起来描述,所以可用下面的等式来定义面向对象的程序:对象=算法+数据结构;程序=对象+对象+…+对象对象的创建当创建好一个类后,用new关键字就能根据这个类创建一个对象出来。Carc=newCar();//实例化一个车对象cc.brand="奔驰";//实例化的车是奔驰牌的c.color="黑色";//颜色是黑色a=c.brand;类与对象的关系类就是一类有相同属性物体的集合,在计算机中,它是一种抽象的数据类型,但是抽象的程度可能不同,而对象就是一个类的实例。例如,将大学生设计为一个类,张三和李四各为一个实例。从这里可以看出,张三和李四有很多共同点,都去某个大学读书,早晨都要去上课,每天都会去图书馆。对于这样相似的对象就可以将其抽象出一个数据类型,此处抽象为大学生。这样,只要大学生这个数据类型编写好,程序中就可以方便地创建张三和李四这样的实例。在代码需要更改时,只需要对大学生类型进行修改即可。继承在面向对象编程的思想中,继承是面向对象程序设计中实现代码重用的重要机制之一,是OOP编程的核心之一。它起源于现实世界中事物之间的关系,因为现实世界中事物之间不是相互孤立的,它们具有共同的特征,但是存在内在的部分差别。继承类之间就反映了这样的关系:当一个类需要用到另外一个类的大部分方法的属性,但又有自己特有的方法和属性时,就可以使用继承这一特性。继承的用途继承就是要实现代码重用,为了提高软件模块的可复用性和可扩充性。继承是从已知的类派生成新类的一种方式,任何类都可以被另外一个类继承。在面向对象编程中,被继承的类称为子类的父类或基类。注意:C#语言中虽然提供了类的继承机制,但只支持单继承,不支持多重继承,即在C#语言一个类只能从一个基类派生。当继承一个类时,成员的访问权限是一个重要的问题。子类不能访问基类的私有成员,但是可以访问其公共成员。这就是说,只要使用public(公有)声明成员,就可以被基类和其子类访问,同时也可以被外部的代码访问。为了解决基类成员访问的问题,C#语言提供了另外一种访问权限protected(保护的)。只有派生类才能访问受保护的成员。publicclassA//公有类A{publicA(){}//类A的构造函数}publicclassB:A//从类A中派生的类B{publicB(){}//类B的构造函数}定义对象在C#中,按照类的成员是否为函数分为两大类,一种不以函数形式体现,称为成员变量,另一种是以函数形式体现,一般包含可执行代码,执行时完成一定的操作,被称为成员函数。类的每个成员都需要设定访问修饰符,不同的修饰符会造成对成员访问能力不同。如果没有显式指定类成员访问修饰符,默认类型为私有类型修饰符。C#中类成员修饰符的定义和使用方法如表所示:2023年1月4日第56页多态多态是面向对象编程思想的核心之一。多态的意思是:当从父类派生了一些子类后,每个子类都由不同的代码实现。因此,同样的调用可以产生不同的效果,主要由子类来决定。在程序运行时,面向对象的语言会自动判断对象的派生类型,并调用相应的方法。多态也是一种代码重用的机制。主要作用就是为了提高代码重用性和简化程序结构。接口接口,Interface,“界面”。界面,是两个有界事物的交界处,通过界面可以与对方交互。交互的方式由约定产生,这种约定就是某具体交互动作的规则,只要遵循规则即可与拥有规则的事物交互。C#语言不支持多重继承,因为多重继承增加了语言实现的复杂度,但是多重继承实实在在可以带来非常灵活的设计。为了保留像C++那样因为具备多重继承而带来的灵活性,C#就提出了接口的概念,通过接口可以实现与多重继承等价的功能接口的本质上就是一些方法。但是要使用这些方法必须按照一定的规则,否则就不能使用。所有的接口成员都是公有的,也就是说不用写出public访问属性了,他就是默认的,是隐式的。,特别注意的是:在声明接口成员时,如果包含任何修饰符,都会出现错误。接口只能被继承,不能实例化。接口的实质就是定义规则,接口的实现交由其他类负责。例如,电灯开关就是一个接口,它的开和关就是两个方法,要使用开关,就必须按开关的规则操作。定义接口interfaceMyInterface//接口{stringSTR//属性STR{get;//属性可读
set;//属性可写
}voidoutMethod();//成员方法outMethod}对象的创建与回收C#中有两个特殊的函数:构造函数和析构函数。构造函数是当类被实例化时首先执行的函数就是new关键字后面的函数。析构函数是当实例对象从内存中删除前最后执行的函数。在一个对象的声明周期中,都会执行构造函数和析构函数。当创建一个对象时,系统首先给对象分配合适的内存空间,随后系统就自动调用对象的构造函数。因此构造函数是对象执行的入口函数,非常的重要。在定义类时,可以给出构造函数也可以不定义构造函数。如果类中没有构造函数,系统会默认执行System.Object提供的构造函数。如果要定义构造函数,那么构造函数的函数名必须和类名一样。构造函数的类型修饰符总是公有类型public的,如果是私有类型private的,表示这个类不能被实例化,这通常用于只含有静态成员的类中。析构函数是一个实现破坏一个类的实例的行为的成员,和构造函数不同,析构函数在类撤销时运行,常用来处理类用完后的收尾工作。如果在对象在运行过程中动态申请了内存控件,就需要在析构函数中进行回收工作。析构函数不能带有参数,也不能被继承,不能拥有访问修饰符,并且不能显式地被调用(在该对象被撤销时自动被调用)。2023年1月4日第61页封装、继承与多态1.封装性在程序中某一个对象的数据或者信息或者属性,对于其他对象是不可访问的,或者不可被直接利用,除非在编写程序的时候允许其他对象来访问该对象的这些信息。2.继承性是面向对象的一个重要特性,C#中支持类的单继承,即只能从一个类继承。继承是传递的,如果C继承了B,并且B继承了A,那么C继承在B中声明的public和protected成员同时也继承了在A中声明的public和protected成员。3.多态性指同一操作作用于不同类的实例,这些类进行不同的解释,从而产生不同的执行结果的现象。在C#中有两种多态性:(1)编译时的多态性,这种多态性是通过函数的重载实现的,(2)运行时的多态性,这种多态性是通过虚成员方式实现的。运行时的多态性是指系统在编译时不确定选用哪个重载函数,而是直到系统运行时,才根据实际情况决定采用哪个重载函数。下面介绍类的重载实现方法。2023年1月4日第62页接口接口用于为实现它们的类定义功能。一个接口定义了一个协议。一个实现了某个接口的类或结构必须符合它的协议。一个接口可以从多个基本接口继承,而一个类或结构也可以实现多个接口。接口中可以包含方法(methods)、属性(properties)、索引器(indexers)和事件(events)等成员。但是,接口不能被实例化,不能包含成员的具体实现,成员的实现需要在类中实现。接口的定义格式如下所示:2023年1月4日第63页
[接口修饰符]interface接口的名字
[:基类接口名]{//接口内容定义}[;]
抽象类随着编程工作的深入,经常会发现,当继承结构向上移动时,越靠上层的类就越抽象,甚至有时已经无法为父类实例化任何代码。这个父类只是作为了一个其他子类的基本框架存在,而不提供具体实例化的代码,即抽象类。声明抽象类需要在声明普通类时在类的名称前使用abstract键字。同样声明抽象的成员需要在成员名称前使用abstract关键字。[类修饰符]abstractclass类名[:基类或接口]{//类成员}2023年1月4日第64页抽象类和接口有一些相似之处,它们都包含由派生类继承的成员,接口和抽象类都不能直接实例化。抽象类可以拥有抽象成员,但是他不能直接被实例化,并且没有代码体,它的执行方法是在其派生类中实现的。抽象类,其实就是一个不完整的类,需要继承它的类来实现它的功能。publicabstractclassMaxhoan//声明抽象类{//抽象类中的方法,没有方法体,请注意
publicabstractvoidMyInfo()}publicclassMinhoan:MaxHoan//抽象类的派生类{publicoverridevoidMyInfo()//实现抽象类的功能{Console.WriteLine("hi,I'mhoan");}}委托与事件回调(callback)函数是Windows编程的一个重要部分,实际上函数指针,是一个非常强大的编程特性。.NET以委托(delegate)的形式实现了函数指针的概念。委
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 融资合同2024年度可转债发行与购买协议
- 统编人教版六年级语文上册第1课《草原》精美课件
- 游乐场装修项目合同书
- 简单解约合同协议书范本
- 租赁2024年度标准厂房合同
- 家庭内部财产分割协议书
- 工程机械租赁合同
- 健康管理学 教育课件
- 屋面防水维修工程施工合同范本
- 《防火防爆措施》课件
- 安装工程估价智慧树知到期末考试答案章节答案2024年山东建筑大学
- 2024年中考历史(辽宁卷)真题评析
- 酒店数字化运营概论 课件 项目四 酒店新媒体推广认知
- 2024年东南亚健身房和俱乐部健身跟踪器市场深度研究及预测报告
- 2024-2030年塔格糖行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 《中国传统建筑》课件-中国民居建筑
- 家庭教育主题家长会(3篇模板)
- 第13课 太空新居(教学设计)2023-2024学年美术五年级上册 人教版
- 广东省医疗收费项目《一、综合医疗服务类》
- 基于STM32的车辆综合无线监控系统设计
- JBT 8881-2011 滚动轴承 零件渗碳热处理 技术条件
评论
0/150
提交评论