使用 override 修飾符來修改方法、屬性、索引器或事件。重寫方法提供從基類繼承的成員的新實現。由重寫聲明重寫的方法稱為重寫基方法。重寫基方法必須與重寫方法具有相同的簽名。
不能重寫非虛方法或靜態方法。重寫基方法必須是虛擬的、抽象的或重寫的。
重寫聲明不能更改虛方法的可訪問性。重寫方法和虛方法必須具有相同的訪問級修飾符。
不能使用下列修飾符修改重寫方法:
new static virtual abstract
重寫屬性聲明必須指定與繼承屬性完全相同的訪問修飾符、類型和名稱,並且重寫屬性必須是虛擬的、抽象的或重寫的。
using System;
namespace VitualMethod
{
class BeiseClass
{
public void RealMethod()
{
Console.WriteLine(@"The ""RealMethod"" method of ""BeiseClass"" class!");
}
public virtual void ViutualMethod()
{
Console.WriteLine(@"The ""ViutualMethod"" method of ""BeiseClass""class!");
}
}
class NewAndOverride: BeiseClass
{
/**//// <summary>
/// “new”用於隱藏基類成員的繼承成員,是重寫方法的另一種辦法;
/// 在同一成員上同時使用 new 和 override 是錯誤的;
/// “override”只是隱藏了虛擬方法。
/// </summary>
new public void RealMethod()
{
Console.WriteLine(@"The ""RealMethod"" method of ""NewAndOverride"" class!");
}
public override void ViutualMethod()
{
Console.WriteLine(@"The ""ViutualMethod"" method of ""NewAndOverride""class!");
}
}
class Tester
{
/**//// <summary>
/// 運行結果:
/// The "RealMethod" method of "BeiseClass" class!
/// The "RealMethod" method of "NewAndOverride" class!
/// The "ViutualMethod" method of "BeiseClass"class!
/// The "ViutualMethod" method of "NewAndOverride"class!
///
/// The "RealMethod" method of "BeiseClass" class!
/// The "ViutualMethod" method of "NewAndOverride"class!
/// </summary>
static void Main()
{
BeiseClass beiseClass = new BeiseClass();
NewAndOverride newAndOverride = new NewAndOverride();
beiseClass.RealMethod();
newAndOverride.RealMethod();
beiseClass.ViutualMethod();
newAndOverride.ViutualMethod();
Console.WriteLine();
//
// 注意:可以看到隱藏方法仍然存在,而被覆蓋的方法已經不存在了;
//
beiseClass = newAndOverride;
beiseClass.RealMethod();
beiseClass.ViutualMethod();
}
}
}