C#继承知识详解

开发 后端
本文向您介绍C#继承方面的知识,包括初始化基类、重写、方法重载等。C#的继承与 C++ 等语言一个重要的不同,就是只能从一个类中继承,这是开发者在权衡了从多个类C#继承的优势与劣势作出的结果。

C#的继承与 C++ 等语言一个重要的不同,就是只能从一个类中继承,这是开发者在权衡了从多个类C#继承的优势与劣势作出的结果。不过,可以从接口继承。另外,继承可传递。构造函数和析构函数不能被继承。

初始化基类

可以在派生类构造函数中添加初始化基类的代码。

  1. public class BaseClass  
  2. {  
  3.     private int i = 0;  
  4.       
  5.     public BaseClass(int index)  
  6.     {  
  7.         i = index;  
  8.     }  
  9. }  
  10.  
  11.  
  12. public class DerivedClass : BaseClass  
  13. {  
  14.     private int j = 0;  
  15.       
  16.     public DerivedClass(int index) : base(index)  
  17.     {  
  18.         j = index;  
  19.     }  

注意派生类构造函数中的 : base(index)。将先调用基类的构造函数。

另外,相对于 this,要访问基类的成员,可以使用 base,当前这不能用在静态方法中,因为静态方法没有实例。

C#继承中的重写

◆virtual 用在基类中,指定一个虚方法(属性),表示这个方法(属性)可以重写。

◆override 用在派生类中,表示对基类虚方法(属性)的重写。

以上的基类和派生类都是相对的。B 是 C 的基类,也可以是 A 的派生类,B 中既可以对 A 中的 virtual 虚方法用 override 重写,也可以指定 virtual 虚方法供 C 重写。

不能重写非虚方法或静态方法。重写的基方法必须是 virtual、abstract 或 override 的。为什么 override 也可以重写呢?因为基类中的 override 实际上是对基类的基类进行的重写,由于继承可传递,所以也可以对基类中 override 的方法进行重写。

◆override 声明不能更改 virtual 方法的可访问性。override 方法和 virtual 方法必须具有相同的访问级别修饰符。
不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。

◆重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被重写的属性必须是 virtual、abstract 或 override 的。

  1. public class BaseClass  
  2. {  
  3.     public virtual string GetString()  
  4.     {  
  5.         return "这是一个虚方法。";  
  6.     }  
  7. }  
  8.  
  9.  
  10. public class DerivedClass : BaseClass  
  11. {  
  12.     public override string GetString()  
  13.     {  
  14.         return "这是重写了的方法。";  
  15.     }  

可以看出,重写与前面讲的重载是有区别的。

C#继承中的方法重载

方法重载并不是类继承中的内容,只是它容易和重写等混淆,所以放在一起谈谈。

什么是重载呢,举个例子,我们在应用 System.IO.File.Create() 方法时,往往可以选择几种参数,这是就方法的重载,同一个作用域、同一个方法名称、具有不同的参数类型或参数个数,在调用方法时,根据参数自动决定使用哪一个方法。

示例

  1. public string GetString()  
  2. {  
  3.     //...  
  4. }  
  5.  
  6. public string GetString(int index)  
  7. {  
  8.     //...  
  9. }  
  10.  
  11. public string GetString(string userName)  
  12. {  
  13.     //...  
  14. }  

在C#中,方法参数没有默认值,可通过重载来实现默认值功能。

 

【编辑推荐】

  1. 一个C#时间计算的实例
  2. C#日期格式化的几种处理方法
  3. 代码详解C#比较时间的三种方法
  4. C#日期格式化的几个要点
  5. C#时间的格式转换的几种方法
责任编辑:佚名 来源: 千一网络
相关推荐

2009-09-24 15:20:54

C#接口定义

2009-08-24 10:31:37

C#接口继承

2009-09-01 18:29:10

C#继承C#多态

2009-06-16 10:20:05

多继承C#

2009-08-13 18:15:06

C#继承构造函数

2010-02-01 16:13:15

C++继承

2009-09-04 17:34:11

C#CC++

2011-07-14 11:08:30

C#继承

2009-09-07 05:24:22

C#窗体继承

2009-08-14 17:09:48

C#引用类型

2009-09-07 16:13:56

C# MessageB

2009-09-01 16:07:04

C#命名规约

2009-08-24 11:23:41

C# TimeLabe

2009-08-27 16:37:06

C#基础知识

2009-08-21 08:41:44

C#反射

2009-08-28 10:22:47

C# DLLImpor

2009-08-13 12:50:45

C#基础知识

2009-08-13 16:13:03

C#基础知识

2009-08-13 18:36:36

C#继承构造函数

2009-08-27 14:29:15

C# explicti
点赞
收藏

51CTO技术栈公众号