重写方法用相同的签名重写所继承的虚方法。虚方法声明用于引入新方法,而重写方法声明则用于使现有的继承虚方法专用化。用override声明所重写的那个方法称为已重写了的基方法。
重写声明和已重写了的基方法具有相同的声明可访问性。换句话说,重写声明不能更改所对应的 虚方法的可访问性。但是,如果已重写的基方法是protected,并且声明它的程序集不是包含重写方法的程序集,则重写方法声明的可访问性必须是protected。
重写override一般用于接口的实现和继承类的方法改写时应注意:
(1)覆盖的方法的标志要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果
(2)覆盖的方法的返回值必须和被覆盖的方法的返回值一致
(3)覆盖的方法所抛出的异常必须和被覆盖的方法所抛出的异常一致,或者是其子类
(4)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖
例三、创建一个虚方法并重写这个虚方法,通过调用两个方法比较结果
<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Text
{
class A
{
public virtual void a()//创建的虚方法
{
Console.WriteLine("这是虚方法");
}
}
class B : A
{
public override void a()
{
Console.WriteLine("这是重写后的方法");
</span> }
}
<span style="font-size:18px;">class Program
{
static void Main(string[] args)
{
B b1 = new B();//创建类B的对象b1
b1.a();//调用重写后的a方法
A a1 = new A();//创建类A的对象a1
a1.a();//调用虚方法a
A a2 = b1;//将类B的对象b1赋值给类A的对象a2
a2.a();//调用虚方法a
Console.ReadLine();
}
}
}
</span>
输出的结果为:这是重写后的方法
这是虚方法
这是重写后的方法
四、外部方法(这个方法很新奇,联想到很多)
当方法声明包含extern修饰符时,称该方法为外部方法。外部方法是在外部实现的,编程语言通常是使用C#以外的语言。外部方法不可以是泛型。










