C基本概念知道.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
类型构造器的执行 类型构造器的执行 所谓类型构造器也就是我们熟知的静态构造方法,在我们编写的类中,都会有一个默认的静态无 参构造方法,跟无参实例构造方法一样是默认存在的。 每当我们对一个类创建第一个实例或访问静态字段前,JIT 编译器就会调用该类的静态构造方法。 当然,静态变量也可以使用上面说的内联方法进行赋值。 这里可以看出,当第一次实例化某个类时,会首先调用该类的静态构造方法。 C#中基类和子类实例化的顺序 这个知识点比较简单,那就是在调用子类实例构造方法之前会调用基类的实例构造方法。从面试 题的结果可以看出,基类的构造方法又比子类的静态构造函数晚一些,此处因个人能力有限,我也没 办法从更底层的角度去分析原理,只能暂且记住吧。 new 修饰符的作用 我看过不少关于 new 以修饰符的形式用在方法声明中的题目,关于 new 的用法在 MSDN 上也 都查的到,官方说法是显式隐藏从基类继承的成员。 我个人的理解比较简单:当子类中,一个方法的签名(指参数,方法名,返回值)与基类的一个 方法相同,通过加入 new 修饰符,可以让子类不做更改的去使用该方法。 说到底,new 修饰符就是让两个不相关的同名方法同时存在而已。(这里同名指相同的方法签 名) 静态类的主要特性: 仅包含静态成员。 无法实例化。 是密封的。 不能包含实例构造函数。 静态构造函数具有以下特点: 静态构造函数既没有访问修饰符,也没有参数。 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。 无法直接调用静态构造函数。 在程序中,用户无法控制何时执行静态构造函数。 静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。 静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。 如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。 结构与类共享大多数相同的语法,但结构比类受到的限制更多: 在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。 结构不能声明默认构造函数(没有参数的构造函数)或析构函数。 结构不能从类或其他结构继承。 结构在赋值时进行复制。将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。 结构是值类型,而类是引用类型。 与类不同,结构的实例化可以不使用 new 运算符。 结构可以声明带参数的构造函数。 一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object。 结构可以实现接口。 结构可用作可为 null 的类型,因而可向其赋 null 值。 ? 抽象方法和虚方法 ? 当基类将方法声明为 virtual 时,派生类可以用自己的实现重写该方法。如果基类将成员声明为 abstract,则在直接继承自该类的任何非抽象类中都必须重写该方法。如果派生类自身是抽象的,则它继承抽象成员而不实现它们。抽象成员和虚成员是多态性的基础,多态性是面向对象的编程的第二个主要特性。有关更多信息,请参见多态性(C# 编程指南)。 抽象基类 ? 如果希望禁止通过 new 关键字直接进行实例化,可以将类声明为 abstract。如果这样做, 则仅当从该类派生新类时才能使用该类。抽象类可以包含一个或多个自身声明为抽象的方法签名。这些签名指定参数和返回值,但没有实现(方法体)。抽象类不必包含抽象成员;但是,如果某个类确实包含抽象成员,则该类自身必须声明为抽象类。自身不是抽象类的派生类必须为抽象基类中的任何抽象方法提供实现。有关更多信息,请参见抽象类、密封类及类成员(C# 编程指南)和抽象类设计。 接口 ? “接口”是一种引用类型,有点像仅包含抽象成员的抽象基类。类在从接口派生时必须为该接口的所有成员提供实现。类虽然只能从一个直接基类派生,但可以实现多个接口。 接口用于为不一定具有“是”关系的类定义特定功能。例如,如果任何类或结构需要让客户端代码判断某类型的两个对象是否相等(无论该类型如何定义相等性),那么该类或结构就可以实现 IEquatable[`1] 接口。IEquatableT 不表示基类和派生类之间存在的同一种“是”关系(例如 Mammal 是 Animal)。有关更多信息,请参见接口(C# 编程指南)。 派生类对基类成员的访问 ? 派生类可以访问基类的公共成员、受保护成员、内部成员和受保护内部成员。即使派生类继承基类的私有成员,仍不能访问这些成员。但是,所有这些私有成员在派生类中仍然存在, 且执行与基类自身中相同的工作。例如,假定一个受保护基类方法访问

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档