摘要:c# 使用 Override 和 New 關鍵字進行版本控制 (C# 程式設計手冊)
C# 可以讓衍生類別所包含的方法,擁有與基底類別方法相同的名稱。
基底類別方法必須定義為 virtual。
如果衍生類別中的方法前面沒有加上 new 或 override 關鍵字,編譯器會發出警告,且方法的行為會如同有 new 關鍵字一般。
如果衍生類別中的方法前面加上 new 關鍵字,該方法會定義為與基底類別中的方法無關。
如果衍生類別中的方法前面加上 override 關鍵字,則衍生類別的物件會呼叫該方法,而不是基底類別方法。
衍生類別可使用 base 關鍵字呼叫基底類別方法。
- override、virtual 和 new 關鍵字也可用於屬性、索引子和事件。
以實際情況為例,可以假設公司 A 建立了名為 GraphicsClass 的類別以供您的程式使用。GraphicsClass 看起來像這樣:
class GraphicsClass
{
public virtual void DrawLine() { }
public virtual void DrawPoint() { }
}
您的公司會使用這個類別,您則用來衍生自己的類別並加入新方法:
class YourDerivedGraphicsClass : GraphicsClass
{
public void DrawRectangle() { }
}
您的應用程式使用起來很正常,直到公司 A 發行新版的 GraphicsClass,如下所示:
class GraphicsClass
{
public virtual void DrawLine() { }
public virtual void DrawPoint() { }
public virtual void DrawRectangle() { }
}
新版的 GraphicsClass 現在多了一個名為 DrawRectangle 的方法。一開始並不會發生任何問題。這是因為新版本仍與舊版的二進位碼相容,表示您所部署的任何軟體都會繼續執行,就算電腦系統上安裝了新的類別也不會有問題。目前對方法 DrawRectangle 所做的任何呼叫,仍會參考您自己衍生類別中的方法版本。
不過,一旦您使用新版 GraphicsClass 重新編譯應用程式,便會收到編譯器發出的警告。如需詳細資訊,請參閱編譯器警告 CS0108。
這個警告會通知您,讓您考量自己的 DrawRectangle 方法應如何在應用程式中執行。
class YourDerivedGraphicsClass : GraphicsClass { public override void DrawRectangle() { } }
內容轉自http://msdn.microsoft.com/zh-tw/library/6fawty39(VS.80).aspx