重寫是指重寫基類的方法,在基類中的方法必須有修飾符virtual,而在子類的方法中必須指明override。
格式:
基類中:
public virtual void myMethod()
{
}
子類中:
public override void myMethod()
{
}
重寫以後,用基類對象和子類對象訪問myMethod()方法,結果都是訪問在子類中重新定義的方法,基類的方法相當於被覆蓋掉了。如下例子:
using System;
class a
{
int x=1;
public virtual void PrintFields()
{
Console.WriteLine("x={0}",x);
}
}
class b:a
{
int y=2;
public override void PrintFields()
{
Console.WriteLine("y={0}",y);
}
}
class c
{
public static void Main()
{
b me=new b();
me.PrintFields();
ay=new b();
y.PrintFields();
}
}
以上代碼運行結果:
y=2
y=2
如果把上面代碼中的override去掉
那麼運行的時候是不會有錯誤,但是會有個警告,因為編譯器不知道你是要重寫該方法,還是隱藏該方法。如果重寫那麼就加override,如果是隱藏那麼就加new,其實不加new也可以運行,但是我們一般還是加上去。
如果是加了new,那麼運行結果是:
y=2
x=1