- 1、本文档共80页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C#——语言.doc
类
类是一种数据结构,它可以包含数据成员(常量和字段)、函数成员(方法、属性、事件、索引器、运算符、实例构造函数、静态构造函数和析构函数)以及嵌套类型。类类型支持继承,继承是一种机制,它使派生类可以对基类进行扩展和专用化。
类声明
class-declaration 是一种 type-declaration(第 9.5 节),它用于声明一个新类。
class-declaration:attributesopt class-modifiersopt class identifier class-baseopt class-body ;opt
class-declaration 的组成方式如下:先是一组 attributes(第 17 章)(可选),后跟一组 class-modifiers(第 10.1.1 节)(可选),然后是关键字 class 和一个用来命名该类的 identifier,接着是一个 class-base 规格(第 10.1.2 节)(可选),后接一个 class-body(第 10.1.3 节),最后还可添加一个分号(可选)。
类修饰符
class-declaration 可以根据需要包含一个类修饰符序列:
class-modifiers:class-modifierclass-modifiers class-modifier
class-modifier:newpublicprotectedinternalprivateabstractsealed
同一修饰符在一个类声明中多次出现是编译时错误。
new 修饰符适用于嵌套类。它指定类隐藏同名的继承成员,详见第 10.2.2 节中的介绍。如果在不是嵌套类声明的类声明中使用 new 修饰符,则会导致编译时错误。
public、protected、internal 和 private 修饰符控制类的可访问性。根据类声明出现处的上下文,这些修饰符中,有些可能不允许使用(第 3.5.1 节)。
以下几节对 abstract 和 sealed 修饰符进行了讨论。
抽象类
abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类。抽象类与非抽象类在以下方面是不同的:
抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类型派生的)。
允许(但不要求)抽象类包含抽象成员。
抽象类不能被密封。
当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写那些抽象成员。在下面的示例中
abstract class A{ public abstract void F();}
abstract class B: A{ public void G() {}}
class C: B{ public override void F() { // actual implementation of F }}
抽象类 A 引入抽象方法 F。类 B 引入另一个方法 G,但由于它不提供 F 的实现,B 也必须声明为抽象类。类 C 重写 F,并提供一个具体实现。由于 C 没有抽象成员,因此 C 可以(但不要求)是非抽象的。
密封类
sealed 修饰符用于防止从所修饰的类派生出其他类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。
密封类不能同时为抽象类。
sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体而言,由于密封类永远不会有任何派生类,所以对密封类的实例的虚函数成员的调用可以转换为非虚调用来处理。
类基本规格
类声明可以包含一个 class-base 规格,它定义该类的直接基类和由该类实现的接口 (13)。
class-base:: class-type: interface-type-list: class-type , interface-type-list
interface-type-list:interface-typeinterface-type-list , interface-type
基类
当 class-base 中包含一个 class-type 时,它表示该类就是所声明的类的直接基类。如果一个类声明中没有 class-base,或 class-base 只列出接口类型,则假定直接基类就是 object。一个类会从它的直接基类继承成员,如第 10.2.1 节中所述。
在下面的示例中
class A {}
class B: A {}
称类 A
文档评论(0)