




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章,面向对象的封装,2,目标,命名空间 构造函数和析构函数 实例变量与静态变量 访问修饰符 单例类 内嵌类 注册表类,3,命名空间,纽卡斯尔,纽卡斯尔,4,组织命名空间的最佳途径,2个项目开发小组分别开发Samsung与Philips的PC中的Monitor,所以都定义了Monitor类。整合项目时才发现类名冲突,于是首先想到更名为SamsungPCMonitor和PhilipsPCMonitor,但是长名称难以维护。怎样创建有条理,有结构的代码? 通过使用命名空间,可以创建一套组织代码的系统。组织命名空间的最佳途径是采用层次结构系统的形式。 可以在层次机构的顶部放置一些较为常规的名称,层级越低,名称越具体,这种层次结构系统可以用嵌套命名空间来表示。,5,命名空间的基本语法,namespace SamsungPC class Monitor public void ListModels() Console.WriteLine(“Samsung供应以下型号的显示器:“); Console.WriteLine(“14,15,17n“); namespace PhilipsPC public class Monitor public void ListModelStocks() Console.WriteLine(“Philips显示器的规格及其库存量:“); Console.WriteLine(“14=1000, 15=2000, 17=3000n“); ,嵌套命名空间,namespace Samsung namespace PC class Monitor public void ListModels() Console.WriteLine(“Samsung供应以下型号的显示器:“); Console.WriteLine(“14,15,17n“); namespace Mobile class CMOS public void ListModels() Console.WriteLine(“Samsung供应以下型号的手机:“); Console.WriteLine(“S1,S2,S3n“); namespace Philips namespace PC public class Monitor public void ListModelStocks() Console.WriteLine(“Philips显示器的规格及其库存量:“); Console.WriteLine(“14=1000, 15=2000, 17=3000n“); namespace Mobile class CMOS public void ListModelStocks() Console.WriteLine(“Samsung手机的规格及其库存量:“); Console.WriteLine(“P1=1000,P2=2000,P3=3000n“); ,7,怎样导入命名空间,如果程序频繁引用名字空间的成员,那么每次引用时都必须指定名字空间,这很快就变得很复杂。using指令解决了这个问题。 Samsung.PC.Monitor mSamsung = new Samsung.PC.Monitor(); 使用 using 命名空间指令可以使长且容易混淆的名称变得简短而且有意义 using Philips.PC; Monitor mPhilips = new Monitor();,8,导入命名空间,using Philips.PC; using Philips.Mobile; class MonitorUser static void Main(string args) Samsung.PC.Monitor mSamsung = new Samsung.PC.Monitor(); mSamsung.ListModels(); Samsung.Mobile.CMOS cSamsung = new Samsung.Mobile.CMOS(); cSamsung.ListModels(); Monitor mPhilips = new Monitor(); mPhilips.ListModelStocks(); CMOS cPhilips = new CMOS(); cPhilips.ListModelStocks(); ,9,访问修饰符,Teacher 类,private 成员,protected 成员,internal protected成员,internal 成员,Student 类,只有 Student 类和 Teacher 类都在同一程序集中,才可访问internal成员,不可访问,不可访问,不可访问,public 成员,可以访问,?,10,程序集,程序集是重用代码的一种方式 .net生成的有两种类型的文件(*.exe,*.dll)。 *.exe文件代表应用程序,*.dll代表类库,不管是*.exe还是*.dll都是程序集。 程序集是.net生成文件的统称,程序集是构成逻辑功能单元的类型和资源的集合。,11,编译程序集,根据下列步骤为什么不能正确编译程序? 代码: Internal_Tom.cs public class Mouse public string name; public void OutDoor() Console.WriteLine(“我是一只鼠,名字叫0。“,name); Console.WriteLine(“我肚子饿了,出门吃东西。”); Internal_Jack.cs internal class Cat public string name; public void CatchMouse(Mouse mouse) Console.WriteLine(“我是一只猫,名字叫0。“,name); Console.WriteLine(“抓到一只鼠,名字叫0。“,); Internal_JackAndTom.cs class JackAndTom static void Main() Mouse Tom = new Mouse(); T=“汤姆“; Tom.OutDoor(); Cat Jack=new Cat(); J=“杰克“; Jack.CatchMouse(Tom); 编译: csc /target:library Internal_Jack.cs csc /target:library /reference: Internal_Jack.dll; Internal_Tom.cs csc /target:exe /reference: Internal_Jack.dll; Internal_Tom.dll Internal_JackAndTom.cs,12,构造函数,构造函数是类的一种特殊方法,每次创建类的实例都会调用它。 通常用于初始化,与类同名,返回该类的对象。,访问修饰符,(), / 构造函数的主体 ,语法:, / 默认构造函数 Employee() _qualification = “研究生“; ,示例:,13,密封构造函数,面向对象框架的特性之一就是用户能够对框架进行扩展和定制,所使用的方法可能连框架的设计者都不曾预料到。这既是可扩展的强大之处,也是它的危险之处。因此,在设计框架的时候,当需要扩展时要小心涉及,而当扩展性存在危险时则要对其加以限制,这一点是非常重要的。 有时候框架的设计者希望只让固定的一些类能队类层次进行扩展。例如,假设我们想要创建一个现存生物的类层次,它被分为两组且只能有两组:动物和植物。,14,密封构造函数,将下列代码在同一个项目中编译成一个程序集: public class LivingOrganism internal LivingOrganism() Console.WriteLine(“生物“); public class Animal : LivingOrganism protected Animal() Console.WriteLine(“动物“); public class Plant : LivingOrganism protected Plant() Console.WriteLine(“植物“); ,15,代码膨胀效应,比较两个类在被初始化时的性能: public class CodeExpand int age = 0; string name=“ “; double salary=0.0; public CodeExpand() public CodeExpand(int a)age=a; public CodeExpand(string n)name=n; public class CodeExpandNone int age ; string name; double salary; public CodeExpandNone() age=0;name=“;salary=0.0; public CodeExpandNone(int a):this() this.age=a; public CodeExpandNone(string n):this() =n; ,16,实例变量与静态变量,静态变量和实例变量谁被先初始化? 静态变量和实例变量谁被称为共享成员? 静态方法可以访问实例变量么? 实例方法可以访问静态变量么? 如何获取类被实例化的次数(即对象个数)?,17,实例变量与静态变量,静态变量先于实例变量被初始化 静态变量被称为共享成员 静态方法不可以访问实例变量 实例方法可以访问静态变量 静态构造函数没有访问修饰符,因为静态构造函数是私有的。 静态构造函数至多执行一次 创建类的实例或者引用类的任何静态成员才激发静态构造函数 this 关键字将引用类的当前实例 静态方法不可以访问this 指针 this用来限定被相似的名称隐藏的成员 this用来将对象作为参数传递到其他方法,18,静态成员初始化与静态构造函数,根据以下三条规则,指出下面这段代码输出什么? 第一创建类的实例或者引用类的任何静态成员才激发静态构造函数; 第二静态成员初始化语句要先于静态构造函数执行; 第三静态成员初始化语句与静态构造函数只执行一次。 class A public static int X = B.Y; static A() +X; class B public static int Y = A.X; static B() +Y; class C static void Main() Console.WriteLine( A.X.ToString() ); Console.WriteLine( B.Y.ToString() ); ,19,类的静态构造函数,指出下列代码的错误: public class 类的静态构造函数 static void Main() tree tr1=new tree(); tree tr2=new tree(8.8,3); tree(); tree(8.8,3); public class tree static double height;int age; public static tree() height=8.8; this.age=3; public static tree(double h,int a) height=h;this.age=a; public tree() height=8.8;this.age=3; public tree(double h,int a)height=h;his.age=a; ,20,单例类,怎样定义这样的类(称为单例类): 1、 只能有一个实例。 2、 必须自己创建自己的唯一实例。 3、必须给所有其它对象提供这一实例。 使用单例类创建打印池: 每台计算机可以有若干个打印机,但只能有一个打印池,避免多个打印作业同时输出到打印机。,21,结构的构造函数,判断下列struct的定义与初始化的正误: struct Point1p ublic int x,y; struct Point2public int x=0,y; struct Point3public int x,y;public Point3() x=y=9; struct Point4public int x,y;public Point4(int x)this.x=x; struct Point5public int x,y;public Point5(int x,int y)this.x=x;this.y=y; public class test static void Main() Point1 p=new Point1(); Console.WriteLine(p.x+“ “+p.y); Point1 p0; Console.WriteLine(p0.x+“ “+p0.y); Point1 p1; p1.x=3; p1.y=4; Console.WriteLine(p1.x+“ “+p1.y); Point2 p2; p2.y=4; Console.WriteLine(p2.x+“ “+p2.y); Point3 p3=new Point3(); Console.WriteLine(p3.x+“ “+p3.y); Point4 p4=new Point4(3);Console.WriteLine(p4.x+“ “+p4.y); Point5 p5=new Point5(3,4);Console.WriteLine(p5.x+“ “+p5.y); ,22,内嵌类,内嵌类是否作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车零部件生产建设项目环境影响报告书
- 肉类食品精深加工项目施工方案
- 物业管理顾问合同范本:智慧社区建设方案
- 离婚双方自愿净身出户财产分割与权益保障承诺书
- 2025年汽车参数考试题目及答案
- 2025年普通话笔试试题及答案
- 老旧厂区改造建设工程项目施工方案
- 光伏发电项目建筑工程方案
- 高强预应力混凝土管桩在支护结构中的实践应用
- 基于岗位需求的汽车类技工教育实践教学体系构建
- 学前儿童产生问题行为的原因分析
- 成人重症患者人工气道湿化护理专家共识 解读
- 常用英语大全
- 装配式建筑装饰装修技术 课件 模块四 装配式墙面
- 金相检验中级试题
- 建筑工程测量培训
- 小学二年级上册体育教案
- (完整版)24点练习题大全
- 电力企业合规培训课件
- 静设备专业设计统一规定(详细工程设计)
- 妊娠合并贫血课件
评论
0/150
提交评论