把一個基類中的方法聲明為 virtual ,則該函數可以在任何派生類中重寫了。
在C#中,函數默認下不是虛擬的,需要顯式的聲明。但在Java中,所有函數都是虛擬的。C#中,派生類的函數重寫另一個函數時,要使用override 關鍵字顯式的聲明。如果聲明了 override 函數,但在基類中如果沒有可以重寫的函數,編譯器就會報錯了。
注意,成員字段和靜態函數都不能聲明為 virtual ,因為這個概念只對類中的實例函數成員有意義。
我們來看個例子。
using System;
namespace gosoa.com.cn
{
public class baseClass
{
public virtual string getUrl()
{
return "cnblogs.com";
}
}
public class baseClass2:baseClass
{
public override string getUrl()
{
return "gosoa.com.cn";
}
}
public class test : baseClass2
{
public override string getUrl()
{
return "www.gosoa.com.cn";
}
static void Main()
{
test classOne=new test();
Console.WriteLine(classOne.getUrl());
}
}
}
本例的輸出結果是 www.gosoa.com.cn
(3)、隱藏方法。
在上例中,baseClass2類的getUrl()方法,如果沒有override 關鍵字,則baseClass2類的getUrl()方法就會隱藏基類的getUrl()方法。在編譯的時候,系統會給予警告。