C#:重载、重写、隐藏的定义

1. 继承的类型:

  • 实现继承:表示一个类型派生于一个基类型,拥有该基类型的所有成员字段和函数。派生类型的每个函数采用基类型的实现代码,除非在派生类型的定义中指定重写该函数的实现代码。
  • 借口继承:表示一个类型之继承了函数的签名,没有继承任何实现代码。

2. 多重继承

C#不支持多重实现继承,允许类型派生于多个接口。

3. 虚方法

把一个基类函数声明为virtual,该函数就可以在派生类中重写。

4. 隐藏方法

如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有声明为virtual和override,派生类方法就会隐藏基类方法。

C#中使用关键字new声明我们要隐藏一个方法:

class MyDerivedClass : HisBaseClass
{
public new int MyGroovyMethod()
{
// some groovy implementation
return 0;
}
}

重载、重写、隐藏的定义:

  • 重载:同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法参数列表不同。通过传递不同的参数来决定调用哪一个方法。
  • 重写:继承时发生,在子类中重新定义父类中的方法。例如:基类方法声明为virtual方法,派生类中使用override声明此方法的重写。
  • 隐藏:基类方法不做声明(默认为非虚方法),在派生类中使用new声明方法的隐藏

重载时,根据参数选择调用方法;

重写时,访问父类、子类皆调用子类的重写方法;

隐藏式,访问父类调用父类的方法,访问子类则调用子类的方法。

比如父类A,有个方法标记为virtual,a(){}   子类B继承A,也声明一个方法a(){}   如果B里面的a()使用override,那么访问A的方法时实际上调用了B里面声明的方法,相当于A的方法被覆盖了,new就不是,访问A的a还是A里面定义的方法,访问B就是B里面定义的方法.

其他关于virtual和override修饰符的重要信息:

  • 重写和被重写的方法必须有相同的可访问性。
  • 不能重写static 方法或非虚方法
  • 方法、属性、索引以及事件,都可以被声明为virtual和override

 

posted on 2013-03-01 17:44  LilianChen  阅读(5605)  评论(0编辑  收藏  举报

导航