《C#程序设计》课件第9章常用类_第1页
《C#程序设计》课件第9章常用类_第2页
《C#程序设计》课件第9章常用类_第3页
《C#程序设计》课件第9章常用类_第4页
《C#程序设计》课件第9章常用类_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

常用类思政目标:

☞理解课程中对常用类的讲解,树立理论联系实际的意识

☞通过面向对象程序设计方法的学习,提高学生的抽象思维能力技能要求:

☞掌握面向对象程序设计的基本概念

☞了解常用类概念及用法

☞理解并掌握抽象类的用法

☞掌握接口与抽象类的关系

☞了解匿名类实践目标:

☞根据示例,对所学的概念进行验证

☞熟练应用面向对象方法实现编程设计第9章抽象类接口匿名类结构Object类抽象类01PART抽象类的概念抽象类是只表达一个抽象的概念,是作为其派生类的一个基类的类。抽象类使用abstract修饰,抽象类不能被实例化,即抽象类没有实例存在。抽象方法抽象方法是只有方法声明但没有方法实现的一个空方法,使用abstract修饰。抽象的方法隐式为虚方法,必须被覆盖,即若某个类继承了一个抽象类,则该类一定要实现基类中的所有抽象方法。另外,抽象方法必须声明在抽象类中。实例设计3个类:star(明星)类、singer(歌星)类、filmStar(影星)类。其中,star类可以设计为singer类和filmStar类的基类。给这些类都设计一个用于介绍自己的方法Introduce(),由于star类的Introduce()方法在singer类和filmStar类并不是很适用,此时,可以在基类star中将该方法声明为抽象方法,star类自然也要声明为抽象类,然后在singer类和filmStar类中对Introduce()方法进行完善(重写)。抽象类从执行结果可以知道,子类实现了基类中的抽象方法,能够顺利输出(1)不确定某个类的方法,但知道其实现的细节是由子类决定,那么就可以把它定义为abstract。(2)抽象方法必须声明在抽象类中,但抽象类不一定包含抽象方法。(3)声明抽象方法时,不能使用virtual、static、private修饰符(4)抽象类不仅可以包含抽象方法,还可以包含虚方法。(5)抽象类中还可以有抽象属性,实例如下1423结果注意事项抽象类接口02PART接口的概念接口,可理解为抽象类的一种特例。在接口中,所有的方法都必须是抽象的,而且接口没有实现代码,只有声明语句。接口的作用通过接口,可以定义类的原形,不用定义类的实现。抽象类中要求其子类必须实现其抽象方法,接口则要求实现该接口的类,必须实现接口内声明的所有成员(也可以理解为实现该接口的类都必须具有相同的形式),因此,接口被看作是类和类之间的协议。在C#中,虽然一个类只能继承一个父类,但可以实现多个接口,借助这个特性,可以间接实现多重继承。接口接口声明接口成员时,接口成员不允许有任何修饰符,如public、private等。接口的声明语法声明接口一个类实现接口的形式声明一个接口,接口包含一个属性和一个方法,其中方法有两个重载版本重载定义一个singer类实现该接口接口定义一个singer类实现该接口接口解析由于已经在接口中定义了属性和方法,故在此一定要实现,当然也可继续在该类中添加需要的成员。匿名类03PART引用由于匿名类型没有名字,所以若想引用它,就需要借助隐式类型变量此处所得到得匿名类型有两个属性,分别为Max和Min,值分别为100和0。可以使用myOb.Max,myOb.Min来访问这两个属性引用如下在使用匿名类型的过程中,需要注意以下六个问题:(1)程序编写人员不能决定匿名类型的名称。(2)匿名类型是隐式封闭的。(3)匿名类型的字段和属性总是只读的。(4)匿名类型继承自System.Object。(5)匿名类型的实体创建只能使用默认的构造函数,不能自定义。(6)匿名类型中不支持事件、自定义方法、自定义操作符以及自定义重写。匿名类的概念没有名字的类就是匿名类型创建匿名类解读其中,name1、name2最终成为该匿名类型的属性,value1、value2成为相应的属性值。表面上,匿名类型没有名称,实则编译器会在内部给它分配一个名称,故匿名类型仍遵从C#的强类型检查规则。匿名类结构04PART02结构与类的不同之处结构属于值类型,声明它使用的是关键字struct;而类属于引用类型,声明它使用的是关键字class注意问题(1)结构不能声明无参数构造函数,只能自行定义有参构造函数。(2)与类一样,结构的成员有字段、属性、方法、构造函数、事件等,但结构不能定义析构函数。(3)结构不能继承其他类或者结构,即结构不能作为类的的基础类型,但是结构可以实现接口。所有结构的直接父类就是System.ValueType。(4)结构创建对象可以像类实例化一样使用new,当然也可以不使用new。使用new时,会调用指定的构造函数完成一些初始化工作;不使用new时,不会调用构造函数,此时,需要自己手工完成初始化工作。03声明结构结构概念结构类型是一种可封装数据和相关功能的值类型

,它与类具有很多相同或者类似特征。01结构实例结构代码定义的结构具有两个字段、一个方法和一个构造函数。调用代码过程中,通过三种方式获得结构对象,即无参构造函数、有参构造函数和不使用new实例化,然后调用其Introduce()方法完成结果输出。Object类05PART概念Object所有成员方法Object类是.NET中所有类的最终基类,也是类型层次结构的根,即所有的引用类型和值类型都直接或间接地继承自Object。这就决定了Object类型可以引用任何类型的对象和任何类型的数组。(1)Equals(ob):确定指定的Object是否相等于当前的Object,要想实现判断对象内容是否相等,需要自己重写该方法。Equals(ob1,ob2):确定ob1,ob2是否相同。(2)ReferenceEquals(ob1,ob2):确定ob1,ob2是否引用相同的对象。(3)MemberwiseClone():浅度复制。(4)GetType():在运行时获得对象的类型。(5)ToString():默认返回类型的完整名称。(6)GetHashCode():返回与调用对象相关的散列代码。Object类0201判断两个数值是否相等,属于相等问题相等问题(1)==作用于类时的情形,如图所示。1.==应用于类和简单值类型Object类由上例可以看出,在引用类型中,==是用于引用比较,即检测引用是否相等。(2)==作用于简单值类型(如枚举类型和整型)时的情形Object类由此例可得,在值类型中,==是用于内容比较,即检测两个对象的内容是否一样。应注意的是,==和!=不能用于struct。0102032.相等性判断方法(1)ReferenceEquals():该方法用于引用类型比较,比较两个引用所指向的位置是否相同;用于值类型对象的比较,永远返回false。(2)静态Equals():该方法涵盖两步比较检测。先按照引用的方式比较,再调用对象的实例方法Equals()比较,如“object.Equals();”。(3)实例方法Equals():为虚方法,默认进行引用比较。当引用比较不合乎自己的要求时,则重新改造方法实现自定义的恒等比较(==)。04由于System.ValueType是值类型的基类,故它重写了Equals()方法,实现了内容比较。也可以理解为,在值类型中,实例方法Equals()比较的是对象内容是否相等,在引用类型中,实例方法比较的是引用是否相等。Object类Object类使用ReferenceEquals()用于引用类型和值类型比较从该例可见,ReferenceEquals()方法在用于引用类型比较时,引用位置相同(即同一个对象)才返回true;在用于两个值类型比较时,永远返回false。Object类Equals(),代码从该例运行结果可见,Equals()方法在用于引用类型时,比较的是引用是否相同;在用于值类型时,则比较的是内容是否相同。GetType()方法用于获取当前实例的类型,返回值为Type;该方法返回的是对象的真实类型,而非声明类型;该方法不含任何参数,是非静态方法。与此相关的方法还有GetTypeCode()方法,GetTypeCode()并非来自object,所以有些类并不具备该方法,如自定义的类和结构。GetType()方法与ToString()方法Object类typeof用于获取类型的

System.Type

对象,例如Array.CreateInstance()方法就会采用typeof来指定要创建一个什么类型的数组对象;sizeof则用于获取值类型的字节大小(并非所有的值类型都能使用),它不能用于引用类型。typeof和sizeofToString()方法ToString()方法是一种虚方法,作用是将其它类型以字符串类型表示。ToString方法可以重写,下面通过示例来讲解重写ToString的方法Object类ToString()方法在某些场合下还具有其他一些功

温馨提示

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

评论

0/150

提交评论