ASPNET20(C#)基础教程07.ppt_第1页
ASPNET20(C#)基础教程07.ppt_第2页
ASPNET20(C#)基础教程07.ppt_第3页
ASPNET20(C#)基础教程07.ppt_第4页
ASPNET20(C#)基础教程07.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、第七章自定义ASP.NET类,李勇平,李勇平 高级培训讲师 Email: QQ:6859870,回顾,理解事件驱动编程的基本概念 熟悉服务器端事件 熟悉浏览器端HTML事件 熟悉ASP.NET控件引发的各种事件 理解ASP.NET服务器控件与客户端脚本 理解ASP.NET页面生命周期以及相应的事件 熟悉服务器对象的使用,李勇平 高级培训讲师 Email: QQ:6859870,目标,程序集概念,.NET部署单元 理解如何定义和使用类 掌握类的基本特性的实现方法 实现类的继承和多态 抽象类和接口的含义,李勇平 高级培训讲师 Email: QQ:6859870,程序集的概念,程序集包含至少包含以下

2、两个要素: 程序中定义的类的元数据以及相关资源和定义这些类的IL代码; 程序中的定义的类的程序清单(即关于程序中定义的类的信息)以及程序集本身的信息,比如程序集的版本信息等 自描述特性 程序集中包含了程序清单和程序集本身的信息 零安装和多版本运行,李勇平 高级培训讲师 Email: QQ:6859870,自定义类,李勇平 高级培训讲师 Email: QQ:6859870,为什么要自定义类,应用:网上购书流程,选择图书(购书项)-添加到购物车-结帐 应用系统涉及的对象包括图书/购物车 要表示图书/购物车,我们必须定义图书/购物车对象(变量)以存储用户所做的选择 要定义对象,必须自定义图书类和购物

3、车类, 系统根据类生成相应的对象,李勇平 高级培训讲师 Email: QQ:6859870,购书项信息(简化),图书名称 图书价格 图书数量 ,李勇平 高级培训讲师 Email: QQ:6859870,购物车信息,购物车是购书项的集合,可以对购物车做以下操作 向购物车中添加购书项 向购物车中减去购书项 查看所有购书项 计算总价格,李勇平 高级培训讲师 Email: QQ:6859870,定义购书项类,类名:ShoppingBookItem 类的成员变量: 所购图书名称:BookName 所购图书价格:BookPrice 所购图书数量:BuyCount 成员变量的访问修饰符 private pu

4、blic protected,李勇平 高级培训讲师 Email: QQ:6859870,成员变量的初始化:构造函数,构造函数有两类,一类是不带参数的构造函数,一类时带有参数的构造函数。 构造函数通常与类名相同; 构造函数不声明返回类型; 构造函数总是public类型; 在构造函数中不要做对类的实例进行初始化以外的工作。,李勇平 高级培训讲师 Email: QQ:6859870,构造对象内存分配,在堆上分配内存 对象变量只是对象的一个引用,李勇平 高级培训讲师 Email: QQ:6859870,内存回收机制,自动内存管理:公共语言运行库能够自动释放对象所占的内存空间。自动内存管理能够为对象分配

5、内存空间,同时也能够自动释放对象的内存空间 托管资源:对象分配的资源的回收是由垃圾回收器来管理的 非托管资源 :.NET 框架提供 Object.Finalize 方法,它允许对象在垃圾回收器回收该对象使用的内存时适当清理其非托管资源,李勇平 高级培训讲师 Email: QQ:6859870,非托管资源内存释放:析构函数,专门释放被占有的非托管资源 析构函数没有访问修饰符,没有返回值; 其名称和类的名称相同,但前置“”符号; 析构函数不能有参数,李勇平 高级培训讲师 Email: QQ:6859870,类的成员变量的访问方法:属性,属性其实就是访问类的私有字段的方法 属性体现了对象的封装性:不

6、直接操作类的数据内容,而是通过访问器进行访问。 购书项的属性,private int nHeight=0; public int Height get if(nHeight=0) nHeight=500; return nHeight; set if(value=0) nHeight=500; nHeight=value; ,李勇平 高级培训讲师 Email: QQ:6859870,数组类变量的访问方式:索引器,定义“索引器”使开发者可以创建作为“虚拟数组”的类,李勇平 高级培训讲师 Email: QQ:6859870,/测试程序 class Test static void TestInde

7、x() IndexerTest IndexMe = new IndexerTest(); IndexMe.1=5; IndexMe2=10; Response.Write(IndexMe1); ,class IndexerTest /声明字段,字段的数据类型为整型数组 private int list=new int10; /声明索引访问器 public int thisint index /get访问器 get return listindex; /set访问器 set listindex = value; ,李勇平 高级培训讲师 Email: QQ:6859870,方法重载,类中如果有两个

8、以上的方法取的名字相同,只要使用的参数类型或者参数个数不同,编译器就知道在何种情况下应该调用那个方法,这就是方法的重载。 构造函数可以重载 类的方法也可以重载,李勇平 高级培训讲师 Email: QQ:6859870,public int toFeet() int nFeet=0; float fMeter=0F; fMeter=nMeter+0.1F*nDecimeter+ 0.01F*nCentimeter+0.001F*nMillimeter; nFeet=Convert.ToInt32(fMeter*3.2808);/1米3.2808英尺 return nFeet; ,/方法重载,可以

9、让用户输入转换系数fConvert public float toFeet(float fConvert) float fFeet=0; float fMeter=0F;fMeter=nMeter+0.1F*nDecimeter+ 0.01F*nCentimeter+0.001F*nMillimeter; fFeet=fMeter*fConvert;/1米fConvert英尺 return fFeet; ,private int nMeter;/表示米 private int nDecimeter;/表示分米 private int nCentimeter;/表示厘米 private int

10、nMillimeter;/表示毫米,李勇平 高级培训讲师 Email: QQ:6859870,演示1:自定义类,(1)定义ShoppingBookItem类 (2)定义ShoppingCart类 (3)在页面中使用上述类,李勇平 高级培训讲师 Email: QQ:6859870,演示2:自定义类,(1)生成图片类CheckCodeImage,图片生成后使用Response对象输出 (2)制作页面CheckCodeImageDemo.aspx,该页面调用类CheckCodeImage,生成图片 (3)使用Image控件指向页面CheckCodeImageDemo.aspx即可,李勇平 高级培训讲

11、师 Email: QQ:6859870,类的继承,李勇平 高级培训讲师 Email: QQ:6859870,对象之间的继承关系,动物类 哺乳动物类 猴类 父类和子类的关系 *类的对象是*类的关系,李勇平 高级培训讲师 Email: QQ:6859870,类的继承,类的继承描述了类与类之间的相互关系,即继承关系。这种继承关系是面向对象编程中提高可复用性的一种方法。 类之间的继承同样存在父和子之间的关系,即父类和子类。 子类继承父类的特性和功能,并且可以引入新的特性或者修改现有的特性,这又进一步提供了系统的可扩充性。,李勇平 高级培训讲师 Email: QQ:6859870,继承语法,public

12、 partial class chap07_Default : System.Web.UI.Page 在页面继承中,继承了Page类的属性/方法/事件 protected关键字 父类的子类可以访问而其他类是不能访问 base 关键字用于从派生类中访问基类的成员:base.printBusinessCard();,public Manager(string name,string sex,string email,string dept,string level) :base(name,sex,email,dept) strLevel=level; ,李勇平 高级培训讲师 Email: QQ:6

13、859870,方法重写(重新定义),子类对父类的方法进行重新定义,使用new 关键字实现方法重写,李勇平 高级培训讲师 Email: QQ:6859870,密封类和密封方法,密封类是防止被其他类继承的类 密封类不能被继承。将密封类用作基类是错误的 在类声明中使用 sealed 修饰符可防止不慎继承此类 对方法使用sealed修饰符可以使一个方法成为密封方法,李勇平 高级培训讲师 Email: QQ:6859870,类的多态性,李勇平 高级培训讲师 Email: QQ:6859870,多态性,多态性是指类的行为的多态性 方法重载(重载后执行同样的方法产生不同的结果)(编译时多态性) 虚函数:父类

14、定义虚函数,子类重写虚函数,在生成父类对象时,具体执行的方法将根据子类的对象来定(运行时多态性),李勇平 高级培训讲师 Email: QQ:6859870,虚函数,定义虚函数 virtual public void Draw(System.Web.UI.Page p) 实现虚函数,override public void Draw(System.Web.UI.Page p) p.Response.Write(在ASP.NET页面上绘制圆); ,李勇平 高级培训讲师 Email: QQ:6859870,虚函数调用,由实现类的类型来决定调用具体的函数 虚函数实现了对象的多态性:即同一个调用执行的代

15、码不一致 方法重载也实现了多态性,李勇平 高级培训讲师 Email: QQ:6859870,类的继承方式总结,类的继承包括两种方式 一种方式是继承实现,也就是直接继承父类的功能或者能力 另一种继承是继承接口,也就是说父类只说明了存在某种功能或者能力并没有实现该功能和能力,而这些功能和能力的实现是通过子类来完成的,这种继承方式称为继承接口。,李勇平 高级培训讲师 Email: QQ:6859870,抽象类和接口,李勇平 高级培训讲师 Email: QQ:6859870,抽象的概念,为什么要进行抽象 抽象是由具体到一般的过程 通过抽象提取一般化的部分,并且定义一般化的部分,这样可以达到代码复用的目

16、标 抽象的类型 将对象抽象为类。 将一种类型的类抽象为抽象类。 将不同的类的相同的操作抽象成接口。,李勇平 高级培训讲师 Email: QQ:6859870,抽象类,在类定义中添加abstract修饰符来创建抽象基类,抽象类具有以下特性: 抽象类不能实例化 抽象类可以包含抽象方法和抽象访问器。 不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现。,李勇平 高级培训讲师 Email: QQ:6859870,抽象方法,在方法或属性声明中使用 abstract 修饰符以指示此方法或属性不包含实现 抽象方法是隐式的 vi

17、rtual 方法。 只允许在抽象类中使用抽象方法声明。 抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ( )。例如: public abstract void MyMethod(); 抽象方法的实现由 overriding 方法提供,它是非抽象类的成员。 在抽象方法声明中使用 static 或 virtual 修饰符是错误的。,李勇平 高级培训讲师 Email: QQ:6859870,抽象类和抽象方法案例,abstract class Shape abstract public void Draw(HttpResponse response);

18、class Circle : Shape override public void Draw(HttpResponse response) response.Write(画园+); ,李勇平 高级培训讲师 Email: QQ:6859870,接口,接口是对某一类操作的抽象 集合类遍历(或者迭代):IEnumerator 接口 序列化和反序列化:ISerializable 接口 定义释放分配托管资料的方法:IDisposable ,包括Dispose方法 开发者不管使用哪一个类,只要开发者了解接口提供的规范,开发者就能够使用这些类提供的这类操作(接口的定义提供了一种操作规范),李勇平 高级培训讲

19、师 Email: QQ:6859870,接口声明,interface ISerializableTest void WriteObject(); void ReadObject(); ,李勇平 高级培训讲师 Email: QQ:6859870,接口继承和实现,可以使用类或者结构来实现接口,并且一个类或者结构可以实现一个或者多个接口,interface ICloneable object Clone(); interface IComparable int CompareTo(object other); class Employee: ICloneable, IComparable public object Clone() . public int CompareTo(object other) . ,李勇平 高级培训讲师 Email: QQ:6859870,显示接口实现,在一个类中实现两个不同的接口的相同名称的方法,interface ISave void WriteObject(Object o); Object ReadObject(); interface ISerilizable void WriteObject(Object o); Objec

温馨提示

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

最新文档

评论

0/150

提交评论