文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C#基础备忘5-类和继承

C#基础备忘5-类和继承

时间:2010-12-28  来源:金山崟霸

 

2. 派生类的引用指向整个派生类的对象 ( 包括基类的对象加上派生类附加的成员 ) ,通过类型转换运算符,当有一个派生类对象的引用时,就可以获取该对象基类部分的引用。在没有虚成员被派生类覆写的情况下 ,通过基类部分的引用,只能 访问派生类对象基类部分的成员 ,派生类附加的 ( 即派生类自己的 ) 成员对其是不可见的 。

 

3. 只有使用派生类对象的基类引用调用被覆写过 (override) 的方法时才会引发多态 ,若方法没有被 override ,则情况同第 2 条所述。关于 virtual 和 override 修饰符: 1. 覆写和被覆写的方法必须有相同的可访问性 ; 2. 不能覆写 static 方法或非虚方法; 3. 方法、属性、索引和事件都可以被声明为 virtual 和 override 。

 

4. 使用基类的引用调用被覆写的虚方法意味着使基类引用的访问权“提升至”派生类内,直到继承层次中被标记为 override 的最高派生级别版本 ,如果在更高的派生级别还有该方法的其他声明,但没有被标记为 override ,则它们不会被调用 。

 

5. 派生类只能 override 所在的继承层次中它直接 父类的 被标记为 virtual 、 override 或 abstract 的成员。

 

6. 执行构造函数时编译器首先执行基类 的构造函数,以此类推执行到 System.Object 类为止,当前类的构造函数是最后被执行 的 。当一个对象被创建 ( 分配内存 ) 后,首先初始化对象的所有实例成员 ,然后是一系列构造函数的执行 。

 

7. 不推荐在构造函数中调用虚方法,因为这有可能会导致在派生类完全初始化之前 调用派生类的覆写方法 。

 

8. 当对象被构造时,基类的无参 构造函数被调用,可以在构造函数初始化语句中使用 base 来指定使用一个特定 的基类构造函数而不是基类的无参构造函数;还可以通过 this 来指定本类中另一个构造函数 进行初始化,但无论 base 还是 this 括号里面的参数列表都应该和相应的构造函数参数列表相对应。注意 :即便使用了 this ,构造函数的执行仍旧是逐级递推到 Object 然后反向逐一执行,还有, this 和 base 不能同时修饰一个构造函数。

 

9. 类的访问级别只有 public 和 internal ,默认为 internal ,除非在类声明中显示地指定为 public ,程序集外部的代码不能访问该类,标记为 public 的类可以被系统中任何程序集中的代码访问。

 

10. C# 允许从在不同的程序集 ( 项目 ) 中定义基类和派生类 ( 注意程序集修改后要重新编译或重新生成解决方案 ) ,应满足:基类必须声明为 public ,必须在 Visual Studio 工程中添加对包含该基类的程序集的引用。注意:添加程序集引用是告诉编译器所需的类型在哪里被定义 ,但增加 using 指令允许你引用此程序集中其他的类而不必使用他们的完全限定名 。

 

11. 基类的 private 成员不能被继承,类中的每个成员都必须指定成员访问级别,若不显式指定,则隐式为 private ,另外,若一个类 的访问性限于它所在的程序集 ( 即为 Internal) ,那么类的成员也被不能在程序集的外部被访问,无论它们的访问修饰符是什么 。

 

12. 任何类的 private 成员只对它自己的类或它的嵌套类的成员可见。标记为 internal 的成员对同一程序集内部的任何类 的成员可见,但对程序 集 外部 的类不可见。 protected internal 是 protected 和 internal 的并集 ,而非交集。

 

13. 抽象成员的实现由分号代替 ,在派生类的实现中必须被 override 修饰,并且只能被声明在抽象类中。能被声明为 abstract 的成员有方法、属性、事件、索引。

 

14. 抽象 (abstract) 类是用来被继承的,它可以派生自另一个抽象类,任何派生自抽象类的类必须使用 override 实现该类所有 的抽象 成员,否则派生类也必须是抽象类,即类中有一个抽象成员就须声明为抽象类 ,一个抽象类可以包含抽象成员 也可以包含普通带实现的实例成员 。

 

15. 密封 (sealed) 类只能用作独立的类,不能被继承。

 

16. 静态 (static) 类中的所有成员必须 是静态的,不能继承静态类,它们是密封的 ,静态类可以有一个静态 构造函数,但不能有实例 构造函数,和抽象类相同,不能创建静态类的实例 。

 

17. C# 3.0 增加了扩展方法允许在保持原有类型不做任何改变的情况下,对相同或不同的程序集内的方法进行扩展,从而可以从容地对第三方程序集进行扩展,并能在原有类型的实例自身上调用该方法。

 

18. 扩展方法必须声明在非泛型或非嵌套的静态类 中,本身必须为 static ,必须包括 this 作为它的第一个参数类型,并在后面跟着它所要扩展的类的名称。另外,扩展可以被继承 ,对 System.Object 的扩展将能被所有类型继承。

 

19. 外部方法是在声明中没有实现并由分号代替实现的方法,实现多是由 C# 之外的语言编写,须有 static 和 extern 修饰符,方法的实现通常由 DllImport 特性引入,通常它包含所引用的外部方法的动态连接库的位置。要使用 DllImport 特性必须要 using System.Runtime.InteropServices; 这个特性可以让我们调用非托管代码,可以使用 DllImport 特性引入对 Win32 API 函数的调用。

 

20. 抽象类也有构造函数 ,如果我们自己没有定义的话,编译器会为我们生成一个默认的构造函数。若不提供访问限定符,则默认为protected 访问级别。这样设计是因为抽象类需要被其他类继承,而这些子类需要被实例化,实例化子类时需要调用子类的构造函数,而在默认情况下,调用子类构造函数前先要调用基类的构造函数的,非常类似于非抽象类。另外,子类在实例化时:只会调用所有父类的无参 构造函数,含参构造函数只能显式被调用 。这种情况并不局限于抽象类,也适用于所有继承情况。

相关阅读 更多 +
排行榜 更多 +
白银之城手游官服下载

白银之城手游官服下载

角色扮演 下载
像素赛车手魔改版下载

像素赛车手魔改版下载

赛车竞速 下载
自由城计划翼豪陆神模组手机版下载

自由城计划翼豪陆神模组手机版下载

角色扮演 下载