1 重寫(override)
重寫(overload)指子類方法對基類虛方法的重寫。當基類中的方法被聲明爲虛方法(使用關鍵字virtual),該方法可以在任何子類中被重寫。若子類需要使用父類中原有的方法,可以使用base關鍵字,該關鍵字引用了當前類的父類。
示例代碼1:
class TestBaseClass
{
public virtual void VirtualMethod()
{
Console.WriteLine("This Is Base Class's Virtual Method");
}
}
class TestDerivedClass:TestBaseClass
{
public override void VirtualMethod()
{
Console.WriteLine("This Is Derived Class's Virtual Method");
base.VirtualMethod();
}
}
static void Main(string[] args)
{
TestDerivedClass testDerivedClass = new TestDerivedClass();
testDerivedClass.VirtualMethod();
}
運行結果如下所示。
C#中屬性也可以被聲明爲virtual,成員字段與靜態函數都不能聲明爲virtual。
當基類和子類中都具有相同簽名的方法聲明,而沒有使用virtual關鍵字時,子類方法便會隱藏基類方法。子類隱藏基類的方式時,編譯器會進行提示:若是有意隱藏基類方法,請使用關鍵字new。
示例代碼2:
class TestBaseClass
{
public void VirtualMethod()
{
Console.WriteLine("This Is Base Class's Virtual Method");
}
}
class TestDerivedClass:TestBaseClass
{
public new void VirtualMethod()//使用new關鍵字告訴編譯器隱藏基類方法
{
Console.WriteLine("This Is Derived Class's Virtual Method");
}
}
2 重載(overload)
重載(overload)指在同一個類中的多個方法具有相同的方法名,參數列表卻不相同。
示例代碼3:
class OverloadExpClass
{
public void ShowMessage(string title, string message)
{
Console.WriteLine(title + ":" + message);
}
public void ShowMessage(string title, string message,DateTime dateTime)
{
Console.WriteLine(title + ":" + message +" "+ dateTime.ToString());
}
}
static void Main(string[] args)
{
OverloadExpClass overloadExpClass = new OverloadExpClass();
overloadExpClass.ShowMessage("title1", "message1");
overloadExpClass.ShowMessage("title2", "message2",System.DateTime.Now);
}
運行結果如下所示
方法重載在開發中普遍使用,在.NET庫中也被廣泛使用。