1-C#核心编程_第七章(定义类)(精)_第1页
1-C#核心编程_第七章(定义类)(精)_第2页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、 e 软国瓯卓越培训num( ETC) 回顾 多态性 对象之间的关系 运算符重载 类定义 构造函数和析构函数 扌妾口和抽象类 C#使用关键字c I ass来定义类: class Myclass /Class Members; 定义了一个类后,就可以在项目中能访问该定义的其他位 置对该类进行实例化。 默认情况下,类声明为内部的,即只有当前项目中的代码 才能访问它,可以使用internal访问修饰符显示指定,如 下所示: (internal) class Myclass /Class Members; 本章目标 类 类定义 另外,还可以指定类是公共的,应该可以由 其他项目中的代码来访问。为此要使用

2、关键 字pub I ic: public cI ass MyCI ass /Cl ass members 除了这两个访问修饰符关键字外,还可以指定类是抽象的或 密封的。为此,可以使用两个互斥的关键字abstract和 sealedo所以,抽象类必须用下述方式声明: public abstract cI ass MyCI ass /Cl ass members, may be abstract. 其中除了MyC I ass是一个公共抽象类,也可以是内部抽象类 类 类定义 类定义 tuujiu 5ret 密封类的声明如下戶斤奈 pub I i c/i nternaI sea Ied cI ass

3、MyCI ass /cl ass member. 与抽象类一样,密封类也可以是公共的或内部的。 还可以在类中指定继承: pub I i c cI ass MyCI ass:MyBase /Class member. 注意:在C#类定义中,只能有一个基类,如果继承卩 叫猛公抽象类,就必须实现所继承的所有抽象成员护 -、 _ 类定义 除了以这种方式指定基类外,还可以在冒号之后指定支 持的接口。如果指定了基类,它必须紧跟在冒号后,之后才 是指定的接口。如果没有指定基类, 则接口就跟在冒号后, 必须使用逗号分隔基类名和接口名。 如给MyClass添加一个接口,如下所示: pub Ii c cI ass

4、 MyCI ass: I Mu Interface /CI ass member. 所有接口成员都必须在支持该接口中实现,但如果不想使用 给定的接口成员,就可以提供一个“空”的实现方式(没有 函数代码)。还可以把接口成员实现为抽象类中的抽象*类定义 以下是类定义中可以使用的访问修饰符的组合。 i nterface I My I nterface/接口名称以大写字母I开 头 /Interface member. 访可修饰符关键字pub I ic和i nterna I的使用方式是 相同的,与类一样,接口也默认定义为内部接口。 所以要使用接口可以公开访问,必须使用public关 键字: pub I

5、ic i nterface I My Interface /I nterface member.含义 只能在兰的项目中访问类 可以在任何地方访问类 public abstract 类可以在任何地方访问,不能实例化, 只能供继承所用 sealed或internal sealed 类只能在当前项目中访问, 不能供派生 使用,只能实例化 接声明接口的方式与类声明的方式相似。但使用的 关键字是i nterface,而不是c I ass,例女口 : 修饰符 无或 internal public absiracl或iniemal abstract 类只能在当前项冃中访问,个能实例化, 只能供继承所用 pu

6、blic sealed 类可以在任何地方访 不能在接口中使用关键字abstract和sea led,因为这两个修 饰符在接口定义中是没有意义的, 它们不包含实现代码, 所 以不能直接实例化,且必须是可以继承的。 接口的继承也可以用与类继承的方式来指定。主要的区别是 可以使用多个基接口,例如: pub Iic i nterface I My Interface:IMyBaseInterface, IMyBaseInterface2 接口不是类, 所以没有继承System. Objecto但为了方便起 见,System. Object的成员可以通过接口类型的变量来访问 O 不能用实例化类的方式来实

7、例化接口。 /Interface member. 接接 构造函数和析构函数 在C#中定义类时,常常不需要定义相关的构造函数和析构函 数,因为在建立代码时,如果没有提供它们,编译器会自动 添加它们。但是,如果如果需要,可以提供自己的构造函数 和析构函数,以便初始化对象和清理对象。 使用下述语法可以把一个简单的构造函数添加到类中: CI ass MyCI ass pub I ic MyCI ass () 构造函数的执行序列 任何构造函数都可以配置, 在执行自己的代码前调用其他构 造函数。 在开发过程中,对象常常不按照预期的那样执行,而是在调 用构造函数时出现错误。这常常是因为类继承结构中的某 个基

8、类没有正确实例化,或者没有正确地给基类构造函数 提供信息。 为了实例化派生类,必须实例化它的基类,而要实例化这个 基类,又必须实例化这个基类的基类,这样一直实例化到 System. Object (所有类的根) 为止。 结果无论使用什么 构造函数实例化一个类,总要先调用System. Objecto /Constructor 析构函数 在.NET中使用的析构函数(由System. Object类提供)叫做 FinalizeO,但这不是我们用于声明析构函数的名称。使用 下面的代码,而不是重写Final i ze (): cI ass MyCI ass MyC I ass () /析构函数体 生成

9、类 打开项目 在资源管理器窗口中选择Program, cs,单机工具栏中的查看 视图按钮,或者直接右键查看视图 显示一个类图CI assDeagraml. cd 单击I My I nterface接口,在资源管理器窗口中,把位置属性 改为右 右击MyBase,选择查看基类类型选项 拖动图中的对象,生成较好的布局,类图就完成了 luuiui 5rtu8m 类库项目 除了在项目中把类放在不同的文件之外,还可以把它们放在 完全不同的项目中。如果一个项目什么都不包含,只包含 类,该项目就称为类库。 类库项目编译为.d 11程序集,在其他项目中添加对类库项目 的引用,就可以访问它的内容。这将扩展对象提供

10、的封装 性,因为类库可以进行修改和更新,而不会影响使用它们 的其他项目。这意味着,我们可以方便地升级类提供的服 务。 右键解决方案资源管理器 添加类库 将Classi. cs重命名为MyExternalClass. cs 右键该项目,添加一个My I nterna IC lass, cs的新类 将亲斤建类改成 I nternaI cI ass My InternaICI ass 右键该项目,生成 在控制台应用程序项目上右键,添加引用,选择浏览 在b i nDebug下找到CI assL i b. d I L 添加 可以在资源管理器窗口中看到添加进去的引用 双击刚添加的引用,可以查看其中包含的对

11、象 修改控制台应用程序中的代码: using ClassLibraryl; stat ic void Ma i n (str i ng args) MyExternaI Cl ass myobj = new MyExternaICI ass(); Conso I e. Wr i teL i ne (myob j ToStr i ng (); Console. ReadKey (); 接口和抽象类 相同: 都包含可以由派生类继承的成员。都不能直接实例化,但可 以声明这些类型的变量。这样就可以使用多态性把继承这两 种类型的对象指定给它们的变量。接着通过这些变量来使用 这些类型的成员,但不能直接访问派生类对象的其他成员。 区别: 派生类只能继承一个基类,即只能直接继承一个抽象类(但可以用一个继承链包 含多个抽象类)。 类可以使用多个接口。 抽象类可以拥有抽象成员(没有代码体,且必须在派生类中实现,否则派生类本 身必须也是抽象类)和非抽象成员(它们拥有代码体,也可以是虚拟的,这 样就可以在派生类中重写)。 接口成员必须都在使用接口的类上

温馨提示

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

评论

0/150

提交评论